ラベル Twitter の投稿を表示しています。 すべての投稿を表示
ラベル Twitter の投稿を表示しています。 すべての投稿を表示

2014年4月9日水曜日

高専プロコン競技部門練習場にツイッターボットを導入したお話

競技練習場のツイッターボット(@KPCP2014)を作りましたー。

別にそんなに難しい話じゃないんですけどね。

一応、(自分なりに)お行儀よく書いてみたから記事にしておきます。

TwitterのAPIを叩くためのライブラリはPythonで有名なTwitterライブラリであるtweepy(https://github.com/tweepy/tweepy)を使いました。(競技場はPythonで書かれています)

ふつうにやった場合。
ー> HTTPの通信のレスポンスを返す間にTwitterのAPIにアクセスしてツイートする。


_人人人人人人人人_
> お行儀が悪い <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
だって、HTTPのレスポンスを返す間に他のところにHTTPリクエストを送るとかなんかエグいじゃないですか。
今回はツイートだけできればいいのでQueueにツイートをためておいて。Workerプロセスを立ち上げておくことでツイートを行う機構を作ってみました。

今回使ったQueueを作るシステムはRabbitMQを使いました。

今回作ったTweetBotシステムは
├── bot_client.py
├── bot_server.py
└── messages
    └── update_ranking.tpl

ツイートのJinja2のテンプレートをmessagesの中に配置します。(Jinja2なのはWeb側に使ってるフレームワークがFlaskだからです)
あとは、ツイートサーバとなるbot_server.pyを
nohup python bot_server.py &
みたいな感じで実行してやって。

ツイートを行いたいPythonスクリプトにて
import bot_client
bot_client.tweet(テンプレートファイル名, パラメータ...)
みたいな感じで関数を呼んでやればツイートを行うことが出来ます。

まとめ

いつもみたいに適当にツイート機能を実装してしまえばよかったんですけど、そろそろ、Python+Flask環境から簡単に構築できるツイートボットシステムが欲しかったので作ってみました。作った奴はまとめてgithubにあげてあります。(https://github.com/higumachan/python_tweet_bot)暇があったら見てみてください。

2013年3月13日水曜日

かわいいぼたんジェネレータを作ってみた!

前作ったこれを改造したものです

だれでも、簡単に◯◯ちゃんかわいいと呟くことの出来るボタンを作ることができます。

どのように作るかと言いますと

まずしたのページにてボタンを作るボタンをクリックします

次に1つだけの入力フォームにかわいいと呟きたい相手の名前を入力します(ちゃんは自動的につくので気をつけてください)

すると、

大体は前回と同じなのですが、今回実装した面白いことを2つほど紹介したいと思います。

  1. 画像を自動的に取得してくる
  2. タイトル画像の自動生成

まず、1についてなのですが、NAVER画像で項目について検索をかけてそのレスポンスをスクレイピングするだけです。

ソースは以下のようになってます。

これは前回書いた記事のクローラファーム上で動いています

これで、画像のurlを取得して表示という流れです。

2つ目は文字列を受け取ってPILで処理して画像に変換! …と言いたいところですが…今回はインチキをしましたw

このロゴジェネレータさんを使ってまた、クローリングでかいけつしました。

パラメータをつけてPOSTで送ってやるだけなんですけどね!

少し、BaseCrawlerを書きなおして置かないとダメなところも出てきてしまったので。書きなおしたりもしてやりきりました。

以下はソースです

色とかも弄れるのでパラメータが多いですね…

最近クローリングばっかりで問題解決してる気がするので。少し反省してちゃんとした解決方法も模索出来るようにして行きたいな〜と思っています。

2012年12月8日土曜日

六花ちゃんが可愛いすぎて簡単なWebサービス作ってみました!

最近中二病でも恋したいにはまっています!

なぜはまっているかというと

六花ちゃんが可愛いからです

りっかちゃん

もう一度言います

六花ちゃんが可愛いからです

りっかちゃん

そんなそんな感じでただの萌豚な僕なのですが六花ちゃんが可愛すぎてこんなもの作ってみました。

りっかちゃんかわいいぼたん

このボタンを押すとTwitterの認証へ飛び認証すると 「りっかちゃんかわいい」とともに六花ちゃんの画像をつぶやきます。

開発言語はいつもの通りPythonです。 フレームワークもいつもの通りFlaskを使いました。

今回のサービスは一応Twitter認証を行うので自分で作ったFlask用のTwitterプラグインを使いました。そのプラグインについてはこの記事で詳しく書いてあります。

別に今回は殆ど思いつきで何も考えずに作ったので何かすごい技術を使ったわけではありません。しかしマイクロフレームワークの強みを生かして本当にすぐに作りました。

みなさん!りっかちゃんは可愛いです!

しかし、どうせ来季になると新しい嫁ができるので早いところ◯◯可愛いぼたんジェネレータにしていきたいと思います。

皆さんもぜひりっかちゃんかわいいと呟いて見ましょう

http://rikka.contents4you.com

http://blog-imgs-51.fc2.com/m/u/t/muttan0920/360bcb51-s.jpg

2012年6月9日土曜日

早起きして Flask MongoDB を使ってWebアプリケーションを作ってみた

昨日、一時間早起きして作ったサービスを今日公開しました。

twitter 流速 スカウター

内容はTwitterでの自分のタイムラインの流れる速さ(ツイート/時)を測ってランキングを作るというサービスです

画面はこんなかんじです

作ったフローは以下のようになっています

  1. 眠い目を擦りながら、いつも使っているflaskの足場をコピペ
  2. 少し、頭がすっきりしてきたと同時に前に書いた記事で作ってあるFlask用のTwitterPluginをgithubからクローン!
  3. 目が覚めて、ガリガリ書く(MongoDBなので最初にがっちりDBを決めなくてもいいから楽でいいです[ごめんなさい情弱で])

こんな感じで(全体的な)ロジックは書きあがりました。

それを@pinkrootさんに丸投げしてHTMLとCSSと部品とかを作ってもらう

なんか、tweepyの中のtwitterとの連携部分でバグって戸惑う

しょうがないから寝る。

次の日も早起きしてデバッグ。

結局別ウィンドウで認証してたのが悪いらしい(3回に2回くらい401エラーが出てた状態)

しょうがないから同じウィンドウで認証するように書きなおす

出来たので、@pinkrootに報告。@pinkroot「よし公開しよう」との事で公開

@refiuteくんが

とのことです

そこで

14分後くらいかな

というわけです。結構がんばったので

という感じでお褒めの言葉をいただきました。

ちなみに同じような感じでユーザの検索機能も追加しました!!

今回の反省点

  1. ちゃんと計測が何回行われたかわかるDBの設計にしなかった
  2. また、さーばを(ry
  3. ランキング機能くらいはちゃんと最初から作っておくべきだったな

2012年5月1日火曜日

WebベースのTwitterClientを作るまで

まず、どうして作ったのか。うちの学校では基本的に学内回線からTwitterできません(スマフォClient、テザリング、ポケットWiFiとか使えばいいんだけど)しかも、私はガラケーです。

最後の望みで合ったTabtterの仕様期間も切れてしまったので、作ってみようかなと思いました。

実装はPython+Flaskです

今回の実装は実装速度を重視したので、ステップの横に所要時間を書いて行きます。

  1. Twitterの認証:前々に紹介したFlaskでTwitter認証を行うモジュールで一瞬でした(10分)
  2. TimeLineの取得:Tweepyというライブラリを使って瞬殺。(5分)
  3. Tweetする:Tweepyで瞬殺(3分)
  4. もう取得したTweetはTimeLineに表示しない:取得したTweetIDの最大を持っておいて次に取得したときそのさっきのTweetIDの最大より大きい間でWhileを回す。(8分)
  5. 適当なHTMLを書く(8分)
  6. ajaxでTimeLineを更新するために適当なjavascriptを書く(8分)
  7. アイコンをtwitter.comから取得するのではなく、TwitterClientのサーバで通信を行いそれをクライアント側に返す(10分)
以上で最小構成のTwitterクライアントが完成です。
Timelineが確認できて、TweetをPOSTできるだけですが。所要時間が所要時間ですし。
まあ、いいかなってかんじです。
なぜ、WebベースのTwitterクライアントなら学内からできるのかというと。
twitter.comとの通信をすべて自前のサーバに任せてしまえば、学内のネットからは自前のサーバに接続するだけなので、その自前のサーバがブロックされない限りはブロックされないようになるというしくみです。なので、アイコンもサーバから取得するようにするのです。


http://pythonmongo-higumachan.dotcloud.com/

これが作ったクライアントです。
ちなみにデプロイで詰まってしまったのでデプロイでするのに実装時間の4倍かかってしまいました。

2012年4月5日木曜日

Flask用のTwitterOAuthモジュール作ってみました

現在TwitterAPIを使うサービスを作っているのですが。
そこで、問題になるのが認証なんですね。
毎回毎回結構めんどくさいです。

それなので、今回はFlaskでTwitterに簡単に認証するモジュールを作ってみました。

https://github.com/higumachan/flask_twitter
使い方は結構簡単にしたつもりで、
@app.route("/path/to")
@twitter_login
def view(api=None):
    pass
こんな感じでビューにデコレータを追加するだけで、Twitterに認証されてればそのビューに入り、認証されていなければ認証画面に入る。という感じです。
認証からのCallbackになってるビューにこのように書けばOKです

@app.route("/path/to")
@twitter_callback
def view():
    return (make_response("ようこそ"))

今回初めてデコレータを使ったのですが、今まで何に使うのかわからなかったのですがたしかに便利だな〜って感じがありました。

TwitterのサービスをFlaskで作るときは使ってみてください。