アサトの実験blog

Pythonでの自動化とか、IT関連で興味のあるテーマについて色々実験する場所です

Kaggle

さて、とにかく何か新しいことを始めよう。。。

ということで最近話題の? kaggle
Kaggle: Your Home for Data Science にアカウントを作成してみました。

Pythonを選ぶと、次のようなメニューが f:id:asato418:20180910235525p:plain

今日は自動投稿のバグ取りに時間がかかっちゃいましたが、ちょっと Kaggleを勉強していきたいと思います。

ちょろっとだけ、多くの人が試しているタイタニック号のテストデータを見るところまでだけ進めました。

f:id:asato418:20180911000904p:plain

Jupyter Notebookはcsvとかの表示も簡単にできていいですよね。 明日から他の人がやってるチュートリアルに沿って試していきたいと思います。

バグ対応(https://kyouno-ryouri.hatenadiary.jp/)

まあただの実験だったので放置でもいいんですが、さすがに毎日同じ料理の情報が書き込まれ続けるのは恥ずかしいので、簡単な逃げを。。

一番先頭の料理情報だけをとってたんですが、とりあえず find_allにして、全リストをとってきたうえで、乱数でどれか一つを表示する形に変更しました。まあたまには同じ料理が続く場合があるかもしれませんが、まあそれは放置(w

まあ超適当に記事をとってくる部分を簡単に修正。。。

def get_todays_food():
    # ヘッドラインニュースのタイトル格納用リスト
    news_data = []

    # urlの指定
    url="https://www.kyounoryouri.jp"
    search_url = "https://www.kyounoryouri.jp/recipe/ranking"

    # ユーザーエージェントを指定
    ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) '\
     'AppleWebKit/537.36 (KHTML, like Gecko) '\
     'Gecko/20100101 Firefox/60.0 '

    req = urllib.request.Request(search_url, headers={'User-Agent': ua})

    #htmlの取得
    html = urllib.request.urlopen(req)
    # htmlパース
    soup = BeautifulSoup(html, "html.parser")
    topicsindex = soup.find('div', attrs={'class': 'recipe--ranking-list'})

    # class「topicsindex」内から記事タイトルを抽出
    list1=topicsindex.find_all('img')
    list2=topicsindex.find_all('div',class_='col')
    num=random.randint(0,len(list1)-1)

    # 記事タイトルとURLを保存
    link=url+list1[num].get('src')
    #print(link)
    body=url+list2[num].get('data-url')
    #print(body)
    title=list1[num].get('alt')
    #print(title)
    news_data.append([title,body,link])

    return news_data

ついでに、今まで夜 8:00に動かしてたんですが朝の方がなにかとバグとかに気づくし、その気になれば自分で手修正したりとかもできるので、朝8:00 に1回だけ動くように変更しました。

from apscheduler.schedulers.blocking import BlockingScheduler
import os

sched = BlockingScheduler()

#@sched.scheduled_job('interval', minutes=720)
#def timed_job():
#       os.system("python hatenapost2.py")
#       os.system("python hatenapost.py")

@sched.scheduled_job('cron', hour=8)
def scheduled_job():
        os.system("python hatenapost1.py")
        os.system("python hatenapost2.py")
        os.system("python hatenapost3.py")
        os.system("python hatenapost4.py")

sched.start()

数回テストしただけで同じ記事が2回出てきたのでダメかもしれないけど、まあいいや。。大したことない処理を簡単に直そうとおもっただけなのに案外時間がかかった。 自動投稿はバグ対応以外は一旦やめて他のことをやろう。。。

そしてこっちは仕様のミス(というか考えが足らなかった)

昨日新しく作った、

kyouno-ryouri.hatenadiary.jp

のページですが、今日もきちんと動きました。。。が、記事が昨日と同じ。。アレ?とおもっってリンク元の記事見たら、そのページは人気順位を出しているので、1位が毎日必ず変わるわけじゃないのでした。。

ということで私が作った処理だと、1位が変わらない限り毎日同じ記事をリンクすることになるという。。。

まあリンク元の記事をよく読んでなかったからしょうがないですね(アホ)。 一応広告が昨日の広告と違う広告になってはいます(^^

まあ今日はだいぶお酒のんじゃったのでどう変更するか明日以降に考えます。。

【heroku】ビルド失敗。。。

なんか自動投稿されないと思ったら、herokuでビルドが失敗してた。。

ase.py", line 918, in _create_trigger
2018-09-08T16:18:19.665649+00:00 app[clock.1]: return self._create_plugin_instance('trigger', trigger, trigger_args)
2018-09-08T16:18:19.665654+00:00 app[clock.1]: File "/app/.heroku/python/lib/python3.6/site-packages/apscheduler/schedulers/base.py", line 903, in _create_plugin_instance
2018-09-08T16:18:19.666080+00:00 app[clock.1]: return plugin_cls(**constructor_kwargs)
2018-09-08T16:18:19.666108+00:00 app[clock.1]: TypeError: __init__() got an unexpected keyword argument 'hours'

新しく特定時間に1回だけ実行する処理の設定を、hours とか書いてたけど sはいらなかったようだ。。。

きちんと heroku logs で確認しないとだめだな。

from apscheduler.schedulers.blocking import BlockingScheduler
import os

sched = BlockingScheduler()

#間隔は1分ごとにしています
#minutesではなくてhourに変更したら、時間での指定も可能です
@sched.scheduled_job('interval', minutes=720)
def timed_job():
        os.system("python hatenapost2.py")
        os.system("python hatenapost.py")

@sched.scheduled_job('cron', hour=20)
def scheduled_job():
        os.system("python hatenapost3.py")

sched.start()

hours を hour に直してデプロイしなおして、今度はうまくいったようだ。。。明日実際動くのを確認する。

2018-09-08T17:08:27.000000+00:00 app[api]: Build started by user asa418@nifty.com
2018-09-08T17:08:42.747312+00:00 app[api]: Release v14 created by user asa418@nifty.com
2018-09-08T17:08:42.747312+00:00 app[api]: Deploy 2b8f66ef by user asa418@nifty.com
2018-09-08T17:08:43.234843+00:00 heroku[clock.1]: State changed from crashed to starting
2018-09-08T17:08:48.281287+00:00 heroku[clock.1]: Starting process with command `python timeclock.py`
2018-09-08T17:08:48.918123+00:00 heroku[clock.1]: State changed from starting to up
2018-09-08T17:08:51.000000+00:00 app[api]: Build succeeded

少しはマシな自動作成サイトを・・・(^^)

画像(リンクでよい)も入った、ちょっとはマシな自動記事投稿をやってみるべー。と思ってやってみた。色々面倒くさいところはあったけど、まあそれなりにできた。

kyouno-ryouri.hatenadiary.jp

1日1回更新はうまく動くかわからないけど、見た目マシなのでとりあえずは満足。

まあ、だけどもやっぱり簡単に自動でやれる限界も感じつつある。まあ日々色々やってたら徐々に良くなっていく。。。かもしれない。

はてなブログPROに登録

はてなブログPROに登録してみました。

1か月1008円。だけれどもまあ、1か月間は無料ということなのでまずは1か月可能な限り毎日続けたいと思っています。(でも今月は法事とか海外旅行とかがあるのでその期間はどうか微妙)

 

今日は残業で遅くなったのであまり何もできませんでしたが、明日にはなんか試してみようと思います。せっかく PROにしたから、PythonSelenium Webdriverを使って自動登録記事の最後にアフィリエイト広告を載せる自動処理でも作ってみたいなぁと思ったりしています。

 

載せたからって宣伝も何もしてないサイトで誰も来ない場所だからまあ意味はないんですが。とりあえずはやってみて、コンテンツが増えたらアフィリエイトもまじめに考えてみようかと思います。月に1008円くらい収入があるようになるといいな(笑)

北海道で震度4 津波心配なし

北海道で震度4 津波心配なし

 

北海道。まだ余震とか続いてるみたいですね。停電も長く続いてるようで、私が住んでいる関東で大震災とかが起きたらと思うと心配になります。

 電気、水道が止まるなんてあまり考えることがないですが、いつ自分の身に降りかからないとも限らないですね。なんかできる準備はしておいた方がいいなとニュースを見ると思います。