【Python】LINE Notifyを使ってPythonから通知を送ってみる
LINE Notifyというサービスをご存知でしょうか。IFTTTやmythingsといったウェブサービスと連携して様々な通知を受け取ることができるLINEのサービスです。前回のブログで”LINE Notify”という固有名詞は出しませんでしたがこれもLINE Notifyを使って通知を送っています。
LINE notifyでは開発者向けにAPIを提供していてウェブサービスを連携しなくても通知を送ることができます。今回はPythonを使って通知を送るところまで紹介します。次回のブログではこれを応用し、スクレイピング結果をLINEで通知するプログラムを書きたいと思います。
使用した環境、モジュール
- MacBook Air Early 2015 Sierra 10.12.6
- Python 3.6.2
- iTerm2(コマンドプロント)
- requests(モジュール pip install requests でインストール)
- アクセストークン
アクセストークンを取得する
1, 以下のリンクでアクセストークンを取得します。
2, トークンを発行するを選択
3, 通知を行う方法を選択します。
"1:1でLINE Notifyから通知を受け取る"を選択するとLINE Notifyから直接通知が来ます。それ以外のグループを選択するとグループを通して通知が来ます。(グループを選択した場合はLINE Notifyをそのグループに招待する必要があります)トークン名を記入して(なんでもいい)発行するを選びましょう。
ちなみにトークン名は通知本文上部の”これ” です。
4, 発行されました。
このページから...二度と発行されませんと書いてありますが表示されたコードはという意味でいくらでも再発行は可能です。スクショするなりメモするなりしておきましょう。
コード
import requests def line(Me): line_notify_token = 'アクセストークン' #先程発行したコードを貼ります line_notify_api = 'https://notify-api.line.me/api/notify' message = '\n' + Me #変数messageに文字列をいれて送信します トークン名の隣に文字が来てしまうので最初に改行しました payload = {'message': message} headers = {'Authorization': 'Bearer ' + line_notify_token} line_notify = requests.post(line_notify_api, data=payload, headers=headers) line('Hello World!!') #関数lineの引数に任意の文字列を入れます
実行するとアクセストークン作成時の画像のようにメッセージが送信されます。今回は通知を送るところまでです。次回は電車の遅延情報をスクレイピングしてLINEに通知を送る実践活用方法をご紹介します。
おまけ
さっきのコードにおまけ機能として複数のアクセストークンを扱うコードを作ってみました。第二引数に変数numを代入して指定したアクセストークンから通知を送るものです。私は天気予報や電車の運行情報などでグループを作りグループごとにアクセストークンを発行しました。
import requests def line(Me,num): if num == 0: line_notify_token = 'アセストークン1' if num == 1: line_notify_token = 'アセストークン2' if num == 2: line_notify_token = 'アセストークン3' line_notify_api = 'https://notify-api.line.me/api/notify' message = '\n' + Me payload = {'message': message} headers = {'Authorization': 'Bearer ' + line_notify_token} line_notify = requests.post(line_notify_api, data=payload, headers=headers)
【仮想通貨】取引所間の差額で貪欲に儲けるアービトラージに向けて【Python】
アービトラージ(裁定取引)とは
取引所によってコインの価格が違い、一番安く買える取引所で買い、一番高く売れるとろこで売ることによって差額で利益を得る手法のこと。取引所間の送金に多少の時間がかかるものの、価格が大きく変動する前に行えるため確実性が高いのが特徴。
今回やること
今回はpythonを使い各取引所の1BTCあたりの価格(ビットコイン)を取得し最適な取引所を出して差額でどのくらいの利益が出るのかを出してみます。対象となる取引所は日本国内のみ、8箇所(bitFlyer CoinCheck Zaif BTCBOX bitbank kraken QUOINEX FISCO)となります。国内には20近くの取引所がありますが今回はapiを提供している取引所に絞りました。非公式でモジュールを作っている方もいらっしゃいますが(pybitflyerなど)価格のみを取得できれば十分なのと記述方法をできるだけ統一したかったので使いませんでした。
使用した環境とモジュール
・MacBook Air Early 2015 Sierra 10.12.6
・Python 3.6.2
・iTerm2(コマンドプロント)
・requests(モジュール pip install requests でインストール)
実践
では早速やってみましょう。使うモジュールはrequestsのみです。tickerをrequestsを使いjson形式でレスポンスを得ますが、jsonはインポートしなくても使えたので下記コードには記述してません。まずは各取引所の価格を取得します。なるべく記述方法は統一しました。
import requests #ticker = getリクエストでjson形式でtickerが返ってきます #price = 買値と売値を格納します 2000000.00のよう返ってくるのでintで小数点以下を切ります #return 戻り値として上記の変数priceをタプルで戻します #krakenの場合、文字列としての小数点が返ってくるので数値のfloatにしてからintで.0以下を切り離します def bitflyer(): URL = 'https://lightning.bitflyer.jp/v1/getticker' ticker = requests.get(URL).json() price = int(ticker['best_ask']),int(ticker['best_bid']) return price def coincheck(): URL = 'https://coincheck.com/api/ticker' ticker = requests.get(URL).json() price = int(ticker['ask']),int(ticker['bid']) return price def zaif(): url = 'https://api.zaif.jp/api/1/ticker/btc_jpy' ticker = requests.get(url).json() price = int(ticker['ask']),int(ticker['bid']) return price def btcbox(): url = 'https://www.btcbox.co.jp/api/v1/ticker' ticker = requests.get(url).json() price = int(ticker['buy']),int(ticker['sell']) return price def bitbank(): URL = 'https://public.bitbank.cc/btc_jpy/ticker' ticker = requests.get(URL).json()['data'] price = int(ticker['buy']),int(ticker['sell']) return price def kraken(): url = 'https://api.kraken.com/0/public/Ticker?pair=XXBTZJPY' ticker = requests.get(url).json()['result']['XXBTZJPY'] price = int(float(ticker['a'][0])),int(float(ticker['b'][0])) return price def quoinex(): url = 'https://api.quoine.com/products/5' ticker = requests.get(url).json() price = int(ticker['market_ask']),int(ticker['market_bid']) return price def fisco(): url = 'https://api.fcce.jp/api/1/ticker/btc_jpy' ticker = requests.get(url).json() price = int(ticker['ask']),int(ticker['bid']) return price
取引所ごとに関数を作りました。まとめて出力するとこんな感じ。買値と売値が格納された変数priceが戻り値とします。戻り値が複数あるのでタプルとして戻ります。
x = [bitflyer(),coincheck(),zaif(),btcbox(),bitbank(),kraken(),quoinex(),fisco()] store = ['bitflyer','coincheck','zaif','btcbox','bitbank','kraken','quoinex','fisco'] #変数xに全ての取引所の買値と売値をリストで格納します #変数storeには全ての取引所の名前をリストで格納します ask,bid = [],[] #リストaskとリストbidを定義しておきます for i in x: ask.append(i[0]) bid.append(i[1]) #askとbidにxに格納した買値と売値を追加していきます
リストaskとbidを出力させてみました。見づらいですが、買値と売値に振り分けられていることがわかります。
dic = {} #辞書dicを定義 count = 0 #カウンター用の変数countに数値0を代入 for i in store: dic.update({ask[count]:i}) #辞書dicに買値が格納された変数askをキーとして前に定義してあった変数storeを順番に値としていきます #これにより価格と取引所の名前が紐付きました count += 1 #askのリストを順番に出すためのカウンターです ask_num = sorted(ask)[0] #変数ask_numにはリストaksを昇順ソートし最前にきたものを格納 best_ask = dic[ask_num] #変数ask_numをdicのキーとして入れると買値が一番安い取引所が出力されます #同じように売値でも dic = {} count = 0 for i in store: dic.update({bid[count]:i}) count += 1 bid_num = sorted(bid,reverse=True)[0] #降順でソートし最前のものを格納 best_bid = dic[bid_num]
最適価格とその取引所名がわかりました。最後に計算をして終わります。
#文字列として一番安く買える取引所と一番安く高く売れる取引所を出力 #最高価格の売値と最低価格の買値を引いて区切り点をつけるフォーマットをしました print(best_ask + ' で買い ' + best_bid + ' で売ると ' + str("¥{:,d}".format(bid_num - ask_num)) + ' の利益')
実行してみました。価格は売買手数料や送金手数料を加味していません。現在1BTCあたりの価格が200万前後なのでこの額でアビトラして単純計算でこのくらいになるよ〜というものです。
今回使用したコードはgithubにアップしておいたので、こっちを貼り付けて実行するほうがはやいです。
使用した各取引所のAPI
・bitFlyer
https://lightning.bitflyer.jp/docs?lang=ja&_ga=2.126827076.871088355.1515307825-602093442.1514284212
・CoinCheck
https://coincheck.com/ja/documents/exchange/api
・Zaif
https://corp.zaif.jp/api-docs/
・BTCBOX
https://www.btcbox.co.jp/api/doc/v1
・bitbank
https://docs.bitbank.cc/
・kraken
https://www.kraken.com/help/api
・QUOINEX
https://www.quoine.com/api/?lang=ja
・FISCO
https://fcce.jp/api-docs
Python入門書はこれ
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (2件) を見る
PythonでMastodonのAPIをいじる【導入編〜tootまで】
最近話題のTwitterライクなSNS、Mastodon。Twitterとの使い道の線引が微妙なやつですが、Pythonのモジュールが公開されていたので遊んでみました。なにはともあれモジュールをインストールしていきます。
使用した環境
・MacBook Air Early 2015 Sierra 10.12.6
・Python 3.6.2
・iTerm2
インストール
pip3 install Mastodon.py
コード
>|python| from mastodon import Mastodon #URLの部分はインスタンスURLです ご自身のインスタンスのURLに変えて下さい # 変数nameはクライアント名を入力して下さい。(自由記述) url = "https://mstdn.jp" name = input('クライアント名\n> ') #Mastodonのアプリ登録を行ないます。 Mastodon.create_app(name, api_base_url = url, to_file = "app_key.txt" ) print('api_key作成完了!') #メールアドレスの入力 #パスワードの入力 mail = input('メールアドレス\n> ') passwd = input('パスワード\n> ') #生成されたapp.keyをしてしてログインします。 mastodon = Mastodon( client_id="app_key.txt", api_base_url = url) mastodon.log_in( mail, passwd, to_file = "user_key.txt") print('user_key作成完了!')
導入
最初にMastodon用のディレクトリを作っておくことをおすすめします。(生成されたkyeファイルを使うため)この中に上記のコードををそのままメモ帳やエディタにコピーして拡張子を.pyにして保存してください。
次にコマンドプロンプトで、Mastodonのディレクトリに移動します。私はデスクトップ上にMastodonディレクトリをおいたのでこのように打ちます。
cd desktop/mastodon
そしてプログラムを起動させて...
python3 CreateKyes.py
このようにapp_keyとuser_keyが生成されたら成功です!(CreateKyes.pyは消しても構いません)
Tootする
最後にトゥートしてみましょう。Twitterでいうツイートですね。以下のコードをコピーして拡張子.pyで先程のmastodonディレクトリに入れて下さい。
from mastodon import Mastodon while True: toot = input('> ',) mastodon = Mastodon( client_id="app_key.txt", access_token="user_key.txt", url = "https://mstdn.jp")
whileで無限ループさせてあるので文字を入力してreturnを押すとtootされ次のtootができるようになります。
python3 toot.py
トゥートされました!
次回はMastodonのAPIを使って遊んでいきたいと思います〜
【Python】落合陽一氏もやっているエゴサbotをPythonで作った【Tweepy】
先日このようなツイートを見つけました。
あ,記事とか出たあと「RTしておいてくださいおねがいです!」っていうライターや出版社からの依頼に答えるのがめんどくさいので自分の名前がツイートに出てきたら勝手にRTされるプログラムは走らせてある.
— 落合陽一/Dr.YoichiOchiai (@ochyai) 2017年12月25日
最近の情熱大陸で一躍有名になった(?)(自分はこれで知った)落合陽一氏ですが、番組が面白かったのでフォローしていました。そこで「Pythonでできんじゃね?」と思ったので、つくってみました。
準備
使うモジュールはTweepyのみです。
無い方は
でインストールしてください。
前回の記事の「各種キーの取得」の手順に沿って「Consumer Kye」、「Consumer Secret」、「Access Token」、「Access Secret」をそれぞれ発行して、コードをメモっておいて下さい。
コード
コード自体はとても簡単で、前回のブログで使用したソースコードを流用します。いわゆるこれがエゴサ段階で、ツイートの識別番号を取得してあるのであとは識別番号を引数としてretweet()に代入してあげればいいだけです。
コード
下記コードをそのままコピーして。searchメソッドではapiの仕様上15件までしか取得できないようなので、実行する間隔を狭めるなりして調整して下さい。(crontabなどを使用して定期実行することが前提となっています。)
こちらは最初からリプライを含むツイートは除外しています。Twitterのbotについては自動化ルール をしっかり読んだ上でお使い下さい。
【IFTTT】地震速報をLINEに送信する
IFTTTを使って地震速報を受信する方法を紹介します。
Twitterでこのアカウントをフォローしている方も多いと思います。
今回はこちらのアカウントが呟いた内容をIFTTTに渡して、LINEに送信するという簡単なものになってます。
完成するとこのような通知が来ます。全国の地震速報が送信されるので、通知を切って後でまとめて読むことが多いです。(速報の意味)それとつぶやかれてから、2,3分ほどのしてから拾うようなので(速報性は)ないです。
何はともあれ作って行きましょう。書いてる最中に気がついたのですがそういえばIFTTTってレシピ(制作物)を公開できることを完全に忘れていました。
とりあえずレシピのリンクを張っておきました。IFTTTのアカウントを持ていない方は取得しておいてください。取得してから、リンク先へ移動すると各種アカウント(LINE、Twitter)の連携を催されるで指示に従い設定していきましょう。
https://ifttt.com/applets/66596467d-twitter-line
あ、あけおめ
【Python】特定の単語を含むツイートを自動でふぁぼるbotを作った
Tweepyを使って自動お気に入り登録ツールを作ってみました。これは指定した文字列に反応して、その単語が含まれているツイートを見つけたら自動的にお気に入り登録するというものです。
例えば、自分の名前やブログ名が入っているツイートを見つけたらお気に入り登録する、自動でエゴサしてくれるツールとなっているので、なにかと応用してみると面白そうです。
今回は、「仮想通貨」という文字列に反応するbotを作ってみました。
使用した環境
・MacBook Air Early 2015 Sierra 10.12.6 Python 3.6.2
必要なもの
tweepy
使用するモジュールはtweepyのみです。無い方はインストールしておいてください。
アクセストークン等のキー
以下の記事の「各種キーの取得」という項目に沿って「Consumer Key」、「Consumer Secret」、「Access Key」、「Access Secret」をそれぞれ発行してメモしておいて下さい。
コード
これではお気に入りに登録する対象を特定の文字列の「リプライを含む全ての」ツイートとなってしまい、不快に思われる方がいらっしゃるかもしれません。なのでリプライを除く処理を追加してみました。
関数api以下のfor文から下の処理を差し替えてお使い下さい。
使い方
上記のソースコードをそのままコピーして「TweetFav.py」で保存しました。
先程メモしたキーをソースコードの該当箇所に代入して下さい。以上で作業は完了なので動かしてみます。
できていますね〜。筆者はcrontabで自動化して日々情報収集に励んでおります。
Twitterのbotについては自動化ルールをしっかりとお読みになった上でお使い下さい。
www.pypi.cf
【Python】ビットコインの価格を定期的にツイートするbotを作った【Application Managementの使い方も記載】
今回は、Pythonを使ったビットコインの価格を取得して自動で定期ツイートしてれるbotを作成しました。
構造としては
1,BeautifulSoupで価格データのスクレイピング
2,Tweepyを使ってツイート
3,crontabを使ってbot化
となっています。
スクレイピングの対象となるbitFlyerのサイトのHTMLをBeautifulSoupで抜き出し、正規表現で文字列を抽出してTweepyを使ってツイートする簡単なものです。Raspberry Piを使ってcrontabでbot化しましたが、今回はツイートするところまでを紹介していきます。
完成品はこちらです。10分毎にツイートするbotとなっています。
01/28 14:50 現在のビットコインの価格
— 篠坂blockchain🦀 (@L00Y) 2018年1月28日
BTC/JPY ask: ¥1,272,660 / bid: ¥1,272,500
前回比 0.53% の高騰
bitFlyerの専用のAPIがありますが、今回は公式サイトのスクレイピング結果をツイートするbotとなっています。
今回のプログラミングで使用した端末
・MacBook Air Early 2015 Sierra 10.12.6 Python 3.6.2
使用したモジュール
・re
・urllib
・tweepy
・datetime
・BeautifulSoup
tweepyとbeautifulsoupは新しくインストールする必要があるので、pipでインストールします。
各種キーの取得
tweepyを使うためにOAuth認証を行ないます。
こちらに移動し、ご自身のTwitterアカウンでログインします。注意点として、予め電話番号とアカウントととの紐付けが必要です。
1,「Create New App」を選択。
2, 「Application Details」の"Name" 、"Description" 、"Website" をそれぞれ入力。完了したら「Create your Twitter application」を選択。
3, 無事作成できたらこの画面になる。「Keys and Access Tokens」を選択。
4, 「Create my Access token」を選択。
5, "Consumer Kye"、"Consumer Secret"、"Access Token"、"Access Token Secret" をそれぞれメモっておく。
コード
以下のソースコードをそのままコピペして拡張子.pyで保存して下さい。先程メモした、キーを"consumer_key"、"consumer_secret"、"access_key"、"access_secret"にそれぞれ代入して下さい。
bitFlyerをスクレイピングしてビットコインの価格をツイートするやつ
〆
以上のプログラムをcrotnabで実行すると完成品のようになります。関数BTCをご自身の好きなものに変えれば、立派なTwitterbotの完成です。
Twitterのbotについては自動化ルールをしっかりとお読みになった上でお使い下さい。このプログラム自体はルールに準じていますが、違反が確認されると、アカウントのロック、又は凍結される場合があります。