LoginSignup
2
2

More than 5 years have passed since last update.

プログラミング初心者が、今のお天気に応じてtwitterの名前を変える例のアレを今更作ってみた on heroku

Last updated at Posted at 2018-08-23

はじめに
この記事はプログラミング初心者によるメモ書きとしての需要が大きいです。
みる方はその辺をご容赦ください。
また、優秀な先輩プログラマーの方のコードを貼っただけの作業です。詳しく知りたければこちらの超優秀な記事を参考にしてください↓

Twitterの名前を5分毎に東京の天気☼☂☃と連動させるサーバレスプログラムを書いたら色々知らないことが出てきた話
AWS lambda と Python3 を使って現在の天気をTwitterの名前に組み込むスクリプトを書きました。
Twitterの名前に絵文字を自動設定してみる

目次
1. したこと、できるようになった事
2. 実際のコード
3. まとめ

1.したこと、できるようになった事

1.twitterAPI、OpenWeatherMapsAPIの取得
2.優秀そうなコードをコピーしてちょっと改造する
3.herokuへデプロイ!

・ 各種API取得方法はググって各々調べてください。たくさん載っています。
twitterAPI取得
・ 優秀そうなコードは,諸先輩方がそれぞれの言語で公開されています。ググりましょう。

先輩プログラマーの方々、本当に感謝します。:relaxed::relaxed:

・ 僕はクレカすら持っていない貧乏プログラマなので、AWSlambdaすら使えず、heroku上で使うことにしました。詳しいやり方はググってみましょう。
Heroku×bottleを使って4分33秒でWebアプリを公開する

実際のコード

今回はpythonを用いたので、大まかなプログラムはこの方の記事
のコードをほぼパクらせて頂いてます。常々感謝します:bow_tone1::bow_tone1:

ただ、いくつか変更点はあります
heroku上だと、定期的にプログラムを走らせるための別のプログラムが必要みたいで、それを作る必要があります。

例えば

main_function.py
def auto_wheather_change():
    #ーー実際のコードーー
    return

というプログラムを実行すれば、お天気がtwitterの名前に反映されるけれど
heroku上ではそれだけでは実行できないのです。簡易そこでclock.pyを新たに作り

clock.py
from apscheduler.schedulers.blocking import BlockingScheduler
import main_function

loop_clock = BlockingScheduler()


@loop_clock.scheduled_job('interval', minutes=1)
def timed_job():
    main.auto_weather_change()


if __name__ == "__main__":
    main.auto_weather_change()
    loop_clock.start()

herokuでclock.pyが動くようにするために、procfileに

procfile
clock: python clock.py

と書いておきます。するとサーバー上ではclock.pyを実行すればいいんだなぁ。とherokuが理解してくれます。

あともう1つ。
herokuでpythonを自動的に実行してくれるようにするためには、簡単でいいからwebアプリの上で実行させなくちゃならない?(僕もよくわかりません先輩方教えてください)らしいのでpythonwebフレームワークbottleを使い、、

twitter定期botをHerokuにデプロイ
↑のことをそのまんま真似ました。
これで僕はherokuでtwitterの名前を変えることに成功しました。


まとめ
・ とにかく先輩のコードは優秀
・ ググラビティ(googleを使いこなす能力の意味を持つ造語)をもっと強化したい
・ 諸先輩方に本当に感謝します

番外編
わからなかったこと
・ heroku上だとなぜwebappを使わなけらばならない?
・ clock.pyのdef関数で

clock_1.py
from apscheduler.schedulers.blocking import BlockingScheduler
import main_function

loop_clock = BlockingScheduler()


@loop_clock.scheduled_job('interval', minutes=1)
def timed_job():
    main.auto_weather_change()


if __name__ == "__main__":
    main.auto_weather_change()
    loop_clock.start()
clock_2.py
from apscheduler.schedulers.blocking import BlockingScheduler
import main_function

loop_clock = BlockingScheduler()


@loop_clock.scheduled_job('interval', minutes=1)
def timed_job():
    main.auto_weather_change()


if __name__ == "__main__":
    loop_clock.start()

の違いがわからない(位のプログラミング初心者です泣)

これは実際にできたものです↓
https://github.com/haruhin/twitterBot

以上
初投稿と初簡易Bot完成の報告qiitaでした!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2