読者です 読者をやめる 読者になる 読者になる

栗’s diary

Python勉強中。トレードに役立つようなTwitter bot開発中。

現在のbot機能

最終更新:2016年11月16日

我がbot

twitter.com

現在の機能は、

  • 1時間に一回、ドル円日経平均先物を呟く。日経平均先物は残念ながら10分遅れ。時間帯によってSGXとCMEを使い分け。リアルタイムで日経平均先物の情報を取得できる無料サイトがあれば教えてね。)
  • 7:00に米国株価指標を呟く。ツイッターの文字数制限がなければもっと増やしたいんだけど。
  • 前場後場が終わって25分後、国内株価指標を呟く。
  • 6:50にCMEのFF金利先物から利上げ確率を計算して呟く。答え合わせはCountdown to FOMC - CME Groupで。数値合わないことがよくあるが求め方が一通りじゃなかったりするせいかなと諦めてる。
  • TDnetの開示情報を場中に5分間隔で確認し、その時開示があった場合には若干のフィルターをかけて呟く。GAEだと1分更新まで出来るがほとんどが5分単位で開示されているので。あんまりサイトに負担かけても悪いんで。
  • 日銀ETFの買入結果の更新状況を5分間隔で確認し、当日分の更新があれば呟く。そのうち、zipファイル内のExcelから数字を読み取って、それを呟けるようにしたい。
  • 企業サイトの新着情報を1分間隔で確認し、更新があれば呟く。監視企業数をどんどん増やしていく予定だが、ちょっとエラー処理が面倒なので保留してる。

【読書メモ】Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-

 

 グーグル先生(とどり先生)のお力を借り、素人に毛の生えた程度にはスクレイピングが出来るようになり、取得した情報をbotでツイートすることができるようになったわけだが、ここでもう一段大人の階段を昇りたくこの本を購入した。(ちなみにKindle版。)

 

1章からいきなりWindowsユーザーは仮想マシンUbuntuを利用してね(ニコッ)ってきて私にはレベル髙すぎたかと思ったが、そこは何とか回避してもある程度OKな気がしている。(まだやってみてないのでわからないが。)

Pythonの基礎知識」なる項目も存在するがたぶんこれだけじゃわからないだろう。Pythonに関しての基礎知識は別途必要になるのでそれを習得しているのが前提。

最初に素人に毛の生えた程度と言ったが、そんな私が「そうだよね。うん、やったやった。」と頷いていたのが3章まで。4章「実用のためのメソッド」からは本格的な学びの時間。クローラー(クローリングとスクレイピングは違うんですよ!)作成にあたっての注意、エラー処理など直近気になっていたことが目白押し!5章は様々な実例。「これはやったことあるな」「そんな事も出来るのか。また使う機会あるかもな。」とか思いながら読み進める。

頭がついていかず、また使う時にきっちり読もうと流し読みになったのが6章から。Scrapyについて熱くその利便性を語られているんだが、今はまだそんな高度なことしようと思っていない私は「・・・」。

7章はサーバーで運用する話。これは検索結果 Google App Engine (GAE)を使って多少やっているんだけど、この本ではAmazon Web ServicesAWS)を使っての説明。また調べて試してみようかねって気にはさせられたが今の段階ではピンと来ず。並列処理の箇所だけは「これ使いこなしたい」ってなった。

 

というわけで、まだ理解できていない部分が多く残ってはいるが、Pythonによるクローリング・スクレイピングについて基礎的なところから高度なところまで網羅的に学べるのではないかと、素人に毛の生えた私が言ってみる。

ただ、実例コードがいくつも乗っているがそこから自分のしたいことに応用が出来るのか、そう簡単じゃない気がしてるがそこは適宜グーグル先生の力を借りながら右往左往するしかないのかなと。

とりあえず本見ながらやってみますわ。実践第一。プログラミングするために新しいPCも購入したので仮想マシンUbuntuもやってみますよ、えぇ。

 

ツイッターbot作成方法まとめ(バージョン1)

GoogleSpreadSheetをデータベースとして使えるようになった今、当初目指していたツイートbotバージョン1が完成した。すなわち、定期的に情報をツイートする、サイト情報が更新されたらツイートするという二つの機能を実装できるようになった。
今回はバージョン1完成を記念し、これまでの日記風ブログをまとめる形で、ツイートbot作成方法の流れをおさらいしてみようと思う。

1.Pythonを使える環境を整える

私がPythonを導入して1年近く経っていたので、当ブログではその詳細には触れなかったが、「anaconda」をインストールしPython環境を 整え、「jupyter」で編集している。足りないmoduleがあれば「pip install」もしくは「conda install」と唱えれば大体うまくいく(はず)。使用環境を整えたい人がいれば、その辺のキーワードでググってみるといいのではないだろうか。参考までに最近見かけたPython導入記事を置いておく。改めて見ると長いな...。

データサイエンティストを目指す人のpython環境構築 2016 - Qiita

2.Twitter APIの取得

まずは、手動クリックで呟いてみる事から。

ツイッターbot作成の道(その1) - 栗’s diary

3.Google App Engine(GAE)を導入する

(定期的に)自動でツイートするにはサーバーを利用する必要がある。そこで私が利用したのが、グーグルのGoogle App Engine。下記記事にその時の体験を書いているが、いま読み返すと見にくいなぁ...まあ日記ですから。ローカルで上手くいくものがサーバー上だとエラーになる現象には本当手を焼いた。

ツイッターbot作成の道(その1) - 栗’s diary

ツイッターbot作成の道(その2) - 栗’s diary

Google App Engineによるアプリ(ツイッターbot)制作まとめ - 栗’s diary

私の場合、無料でも使える有償アカウントが結局必要になった。

ツイッターbot作成の道(その7):GAE有償アカウント、そして完成へ - 栗’s diary

4.ログを残す方法をマスターする

サイトが更新されたら呟く。それって結局頻繁にそのサイトを訪れて前回から変更があれば呟くという定期botの応用形なんですよね。その際に前回情報を残しておく必要があるわけで。GAEの中のファイルは外から更新できない仕様のようなのでどこか外部に。Googleはサンプルとしてデータストアの使用を挙げていますし、今後どこかでそれは使う予定ですが、とりあえずGoogleSpreadSheetを使ってみましたよと。

ツイッターbot作成の道(その6): GoogleSpreadSheet - 栗’s diary

 

あっさり書くとこんな感じでしょうかね。

今後はWebスクレイピングの技術を高め、pdfの解析、zipファイルの中のエクセルファイルの解析(日銀め...)など出来るようになりたいと思います。

また監視サイトを増やしていった場合に起こるであろう遅延との闘いにも備えないといけません。

慣れて来たらGoogleSpreadSheetからデータストアへの移行もするでしょう。たぶんそっちの方が処理が早いはずだから。

その先は、テキストマイニングとか機械学習とかディープラーニングとかよくわかってませんが、読み込んだデータから市場に与える影響度なんか出せたら格好いいなと思ってます。

短い間、ご愛読ありがとうございました。栗先生の次回作にご期待ください。

ツイッターbot作成の道(その7):GAE有償アカウント、そして完成へ

ツイッターbotも完成だなと、まとめブログを書こうと過去記事を振り返っているとある事に気づきました。

https://appengine.google.com/に行ったらエラーログを見れるという事に...。

そこで吐き出されていたエラー

The Socket API will be enabled for this application once billing has been enabled in the admin console.

あっ、無料じゃSocket API使えないのか...。

今までは60日間無料トライアルを使ってましたが6月26日で切れました。それまで上手くいっていたGoogleSpreadSheetとデータのやり取りが出来なくなってエラーを吐くという事に。くっ、GoogleSpreadSheetマスターしたのに使えないのか...と徒労感を一瞬味わいましたが、有償アカウントに切り替えて無料で使うことが出来るとの事。さっそく設定して無事に難を乗り切りました。たぶん。(後から請求来ないよな、ドキドキ。)

APP ENGINEの料金

有償アカウントへのアップグレード  |  Free Trial  |  Google Cloud Platform

Quotas  |  App Engine  |  Google Cloud Platform

予算の設定などは Google Cloud Platform から。

ついにツイッターbotバージョン1完成しました。

まだ、zipファイル開いてExcelの中身読み込むなんて高等テクニック使えないのでとりあえずこれで勘弁。