2011年05月30日

Twitterのbotを作ってみる【マルコフ連鎖を使ってみる編】

日本語を話すbotなら形態素解析したいよね!ということで、よくある「マルコフ連鎖」を使ったbotを作ってみました。
元データとして自分の今までのツイートのログを使い、形態素解析してマルコフ連鎖で文章を作るようにします。

形態素解析はMeCab+IPA辞書を使用しています。
気を付けたのは以下の点

・あまり突飛な文章にならないようにする→3次のマルコフ連鎖にする
・他人の文章は使用しない→「RT 」「QT 」などで始まる引用文は削除する
・他ユーザ名(@〜)やハッシュタグ「#〜」、URLは削除する
・文章の始まり、終わりは日本語らしいものにする
 (「な人がいたので私の」みたいな明らかな断片にならないよう、主語〜述語の形を取るようにする)

3次のマルコフ連鎖の作り方は、MeCabとPythonでマルコフ連鎖を書いてみる(改)を参考にして、リストを作る単語の数を3つにしてみた。
Twitterにつぶやくため、文章が長すぎないように80文字以上120文字以下にしている。

また、「日本語らしい文」にするたえ
・文章の始まりは非自立名詞、英単語以外の名詞から始まるようにする
・文章の終わりは句点(。)、終助詞、助動詞とし、さらに助動詞でも一部の語を除くようにする
・文章の終わりが「っ」だった場合「た」を追加する
・文章の終わりは句点を追加する
という工夫を加えている。

これでかなり「読めるけどなんかおかしい」文章が生成されるようになった。
URLはこちら

http://twitter.com/Shadow_Tombu
posted by 岩永 at 18:23| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

Twitterのbotを作ってみる【今日の天気をつぶやいてみる編】

今回作成したbotは決まった時間にスケジュールと写真しかつぶやかなかったので、朝の挨拶をつぶやく機能を追加しようと考えました。
どうせなら「おはようございます」という挨拶だけでなく、天気予報も呟いてみようと思います。

天気予報が取得できるAPIがあるようですが、これは有料っぽい。
ならばRSSで取得できないかと探してみると、Yahoo!天気予報livedoor 天気予報が各地の天気予報をRSSで配信しています。
どちらを使うか迷いましたが、「天気 最高気温/最低気温」という質実剛健なパラメータのYahoo!天気予報を使うことにします。

RSSの取得はurllib、取得したRSSの解析はElementTreeを使います。
RSS(XML)のtitleタグに日付が入っているので、今日の日付の文字列で検索。
見つかったところの天気予報部分のdescriptionタグの値を取りだして、文字列を分解して天気、最高気温、最低気温を取得します。

朝の挨拶は「おはようございます。今日もよろしくお願いします。」という定型文なので、あとは取りだしたパラメータを使って「今日の佐賀県の天気予報は○、最高気温はXX℃、最低気温はYY℃だそうです。」という文章を使ってツイートするようにしてみました。
ラベル:Twitter bot Python
posted by 岩永 at 17:35| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

2011年05月06日

Twitterのbotを作ってみる【時刻指定のコマンド実行編】

先日作ったTwitterのbotは
・今日のスケジュールをつぶやく(「本日は19:30から会合の予定です」「本日はキャンプの予定です」)
・明日のスケジュールをつぶやく(「明日は会合の予定です」)
・来週のスケジュールをつぶやく(「来週は○日に会合の予定です」)
・過去の行事の写真を投稿する
というものです。

今日のスケジュールがつぶやけるなら、スケジュールの開始時間になったら「会合なう!」とつぶやくのも面白いかな、と考えて、指定時刻つぶやき機能を実装してみることにしました。
実装に使用したのは実質1コマンド。
Linuxのatコマンドが時刻指定の実行コマンドだったので、それを使用しました。

もともとの「今日のスケジュールをつぶやく」スクリプトで、時刻が指定されていたらその時刻に「○○(行事名)なう!」を引数にしてつぶやきスクリプトを実行するようにしました。
コマンドはこんな感じ。

cmd_str = 'echo "/usr/local/bin/python /(スクリプトのパス)/スクリプト名 %sなう!" |at %s' % (event_str, start_time)
os.system(cmd_str)

event_strとstart_timeは前処理としてつぶやき作成時に切り出してます。
これだけでstart_timeで設定している時刻にスクリプトを実行することができました。
ラベル:Twitter bot
posted by 岩永 at 04:55| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

2011年05月01日

Twitterのbotを作ってみる【ユーザ検索・フォロープログラム作成編】

TwitterのAPIではユーザのプロフィールの検索はできないらしい。
ということでまたGoogle先生にお伺いを立てて、2種類のプロフィール検索APIを見つけた。
Left HandleというところのAPI http://tps.lefthandle.net/
twipro http://twpro.jp/ というAPIがあるようだ。
あまり違いはないみたいなんだけど、検索結果の説明が分かりやすいのと、検索結果をソートできるのでLeftHandleのAPIを使ってみることにする。
これは認証とかいらないのでリクエスト文を作ってGETリクエストを投げるだけ。
難なく検索結果を取得してIDだろうが名前だろうが取ることができた。
ところでこれ、nameとscreen_nameの中身が逆転してない?

さて、検索結果は取得できたので、結果からまたTwitter APIを使ってフォロー処理を行うことにする。
しかしここでつまづいた。
これまで作ったスクリプトはTwitterへの投稿に特化しているので、フォロー処理が401 Not Authorizedで返ってくるのだ。
ググって見つかるプログラムもみんな投稿処理しかしてないから参考にならない。

よく分からない試行錯誤をして、冷静になって考えてみる。
oauthはHTTPリクエストを元に秘密鍵で署名を作成して、公開鍵(を含めたHTTPリクエスト)と秘密鍵を送信して認証を行う。
だから、フォローAPIのHTTPリクエストを作って鍵の作成を行えばよいのだ!
ということで、Twitterへの投稿コメントを受け取ってHTTPリクエストを作成し、認証を行う処理を、HTTPリクエストのURLとパラメータを受け取ってリクエスト文を作成し、認証を行うように修正した。
結果は思った通り、投稿もフォローもできるようになった!


ということで、やりたかったことがほぼ全てできるようになり、Twitter botの稼働を開始することができた。
楽しかったな。

botのURLはこちら
http://twitter.com/#!/oyajibakkai



やり残したこと・改善したいこと
Google Calendarの行事を取得するのに時々APIエラーが出るので、この時の対応
OAuth処理の改善
Primary Calendar以外のカレンダーからのイベントの取得
Twitpicに画像を投稿する際にいったんリサイズ(縮小)する処理の追加
ラベル:Twitter bot
posted by 岩永 at 17:18| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

2011年04月30日

Twitterのbotを作ってみる【画像投稿プログラム作成編】

次は画像投稿の処理だけど、Picasa Web AlbumのAPIがよく分からない。
http://code.google.com/intl/ja/apis/picasa/ ではPicasaにボタンを追加するだけしかできないの?
と思ったら、これはWeb AlbumではなくてPicasa(アプリ)のAPIなのか。
Picasa Web AlbumのAPIなら画像を検索してダウンロードできそうだ。
Picasa Web AlbumのAPIでPythonが使えるのはV1しかないみたいなので、V1でスクリプトを作成。
こちらは簡単にPicasaから任意のアルバムと写真を取ってくることができた。
「任意の」には乱数を使用。まずアルバムのリストを取得して、randintでアルバムを選択。
それからアルバム内の写真のリストを取得して、これもrandintで写真を選択。
適当なアルバムから適当な写真を選択し、URLを取ってくることができた。
アルバム名は「年+月+行事名」としているので、アルバム名から「XX年YY月の○○の様子です」というコメントを作成した。

次はTwitterに投稿するAPIを探そう。
自分自身のTwitterアカウントから画像を投稿するときは、TwitPicを使ってるので、同じのがいいな。
TwitPicもAPIを公開しているみたいだ。Python-Twitpicというライブラリを発見。
これで勝つる!
TwitterのOAuth Keyを使って、それほど困らずにTwitpicへ画像とコメントを投稿することができた。
さらに戻り値として投稿した画像のURLなどが得られるので、そのURLを使って今度はTwitterに投稿する部分も作製した。
(古いバージョンのAPIだとPython-TwitpicでTwitpicへ投稿+Twitterに投稿できるが、新しいバージョンではできないみたいだ。)
ラベル:Twitter bot
posted by 岩永 at 00:00| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

2011年04月29日

Twitterのbotを作ってみる【スケジュール投稿プログラム作成編】

とりあえず環境はできたので、Googleカレンダーからスケジュールを取ってくるスクリプトを考える。
まずはGoogleからGoogle Calendarを操作するためのgdata-python-clientをダウンロード。
http://code.google.com/p/gdata-python-client/downloads/list
んでインストール。
Google Data ProtocolでもOAuthが使えるようなのだが、トークンをもらうのにドメインの認証が必要みたい。
現時点ではサーバのある場所から離れているので、OAuthの登録ができない。
仕方ないので、ClientLogin方式でやるか。

で、Data API Developer's Guide: Python をもとにサンプルコードを書いてみる。
http://code.google.com/intl/ja/apis/calendar/data/2.0/developers_guide_python.html

おやじの会のスケジュールと学校行事・PTA行事を別の種類のカレンダーとして登録しているが、おやじの会のスケジュールしか取れない。
検索して見つかるものは gdata.calendar.service クラスを使用しているコードがほとんどだがこれはバージョン1.0のクラスじゃないか?
バージョン2.0では gdata.calendar.client クラスになっている(と思う)ので、肝心なところで参考にならない。
gdata.calendar.client だと、複数のカレンダーからイベントを取得する方法が分からない。
みんなが書いているやり方はバージョン2.0では使えない気がする。どうしたらいいんだ?

ちょっと調べてみたが、pyhtonのData API Developer's Guideでは"When invoked with no parameters, the GetCalendarEventFeed method returns the user's primary calendar."
と書いてあるが、Javaの方にはそんな注意書きはない。
「no parameterならprimary calendarしかとれない」とあるので、queryがあればprimaryからもsecondaryからも取れるのかと思ったがそうではないみたいだ。
しかたないので、primary calendarだけでやるしかないようだ。バグなのかなあ?
※google calendaraではアカウント作成時からあるカレンダーをprimary calendar、それ以外の後から作成したカレンダーをsecondary calendarというようだ。

ということで、不本意ながらもprimary calendarから予定を取得することができた。
ちなみに開始・終了時刻がある場合は、取得したイベント情報に開始時間と終了時間があるが、終日のイベントには開始時間も終了時間も設定されていない。
これをチェックして、「今日は○○の予定です」「今日はXX:YYから△△の予定です」として、Twitterに投稿できるようになった。

これと最初に作ったTwitter投稿用のスクリプトを組み合わせて
・朝7時に本日のスケジュールがあればTwitterにつぶやく
・朝8時に明日のスケジュールがあればTwitterにつぶやく
・朝9時に来週のスケジュールがあればTwitterにつぶやく
という3つのスクリプトを作った。
ラベル:Twitter bot
posted by 岩永 at 00:00| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

2011年04月28日

Twitterのbotを作ってみる【環境構築編】

出張先の仕事が落ち着いてきて、土日は両方とも休めるようになって時間ができたので、思い付きでTwitterのbot(自動でつぶやきを投稿するプログラム)を作ろうと考えた。
自分がやっている小学校のおやじの会のbotにしよう。
考えた機能は以下の通り。
・おやじの会の打ち合わせや行事予定をつぶやく
・学校行事予定をつぶやく
・過去の行事の写真を投稿する
・プロフィールに「おやじの会」を入れている人をフォローする
この4つの機能を自動で行うようにしたい。

行事予定や写真をどうやって管理するか。
Googleのサービスを使えば、プライベートでも使用しているから使い方は分かるし、APIが提供されているから外部プログラムから取ることができる。
ということで、行事予定はGoogle Calendarを使い、写真はPicasa Web Albumを使用することに決定。




準備したもの
・Python 慣れていたのでなんとなく。開発はWindowsXPだが稼働はCentOS上でやりたかったので、スクリプト言語にした。
     3.2をインストールしたが、下記理由で2.7にした。
・easy_install python twitterをインストールするのに必要っぽかったので。Python3.2では対応してないみたいだったのでわざわざPython2.7を入れなおした。
・python-twitter PythonからTwitterにいろいろするためのライブラリ。
・python-twitpic Pythonからtwitpicにいろいろするためのライブラリ。
・Google Data API Googleのいろいろなサービスを操作するためのAPI。



やったこと
・GoogleカレンダーやPicasaWebアルバムと連動させようと思ったので、Googleアカウントを取得。
 取得したアカウントでGoogle Calendarにおやじの会のスケジュールと学校行事・PTA行事を登録。
 Picasa Web Albumに過去のおやじの会の行事のアルバムを作成した。
・Twitterのアカウントを取得
・Pythonのインストール
 上で書いたように、最初はPython3.2を入れたが2.7を入れなおす。
 ググってpython-twitterというものがあるらしいと知ったのでeasy_install→python-twitterをインストール
・スクリプト作成
 ググって見つけたサンプルコードをまねて、Twitterに投稿するスクリプトを作成。
 いきなり認証でつまづく。
 OAuthしか許容しないようになってるんじゃないか?
 しかもpython-twitterは使えない雰囲気。
 ということで、「やる夫とPythonで学ぶTwitterのOAuth」を参考にTwitter botのAccess Tokenを取得した。
 コードも丸パクリでやってみたらうまくいったので一安心。
 けどこれってpython twitter意味ないんじゃ…
 ということで、oauth-python-twitterなるものがあるみたいなので、これをインストール。
 最初に書いて見事にこけたスクリプトを書き直して試してみる。

 「良いもの。悪いもの。」を参考にしてみたけどハマる。
 サンプルスクリプト中の”tw = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, request_token)”は不要みたいだ。
 あと、oauth-python-twitter には OAuthApi.getAccessTokenWithPin がないので、普通は__init__.pyを修正してインストールするみたい。
 しかしWindowsでeasy_installを使うと、修正する暇もなくインストールされてしまう。
 めんどくさいのでoauth-python-twitterを使うのはあきらめた。
 Linuxに載せ換えるときに考えよう。
ラベル:Twitter bot
posted by 岩永 at 00:00| Comment(0) | TrackBack(0) | パソコン | このブログの読者になる | 更新情報をチェックする

2011年02月15日

笑顔のコーチング

egao.jpg


ハロードリーム」というNPO法人があります。

ここは「笑顔」と「夢」をキーワードに様々な活動をしているのですが、このハロードリームが主催する「笑顔のコーチング」に参加してきました。
この「笑顔のコーチング」とは、毎日の暮らしで笑顔を増やすためにコーチングの手法を使っていろんな笑顔を引き出すというワークショップです。

当日は70名ぐらい集まったでしょうか。初対面の人が多かったですが、「笑顔」がテーマなのですぐにあちこちで笑い声が上がり楽しい雰囲気でワークショップは進んで行きました。

私はそのあとに行われた「笑顔のコーチング ファシリテーター養成講座」にも参加し、ファシリテーターの認定を受けてきたので、私も同じように「笑顔のコーチング」を開催することができるようになりました。

講師や講演をする機会が増えたので、ワークショップに参加したり講演を機器に行くと、内容もしっかり聞きますが、講師の話術や動きなどもチェックする癖がついてます。
講演の場合は内容が一番大事ですが、聞く人を飽きさせない話し方と、時々笑いを引き出したりするために話すネタの構成が重要だと感じています。
ワークショップの場合は、参加者が作業をするので「飽きさせない」というところは難しくないですが、参加者のやる気を引き上げるために、テンポよく雰囲気を盛り上げるような話し方が大事だと感じました。

今回の「笑顔のコーチング」とファシリテーター養成講座の講師をされた本間正人コーチは当然話もうまいのですが、見た目やTwitterの発言からは想像できないぐらいお茶目な方で、それも楽しかったです。

実は「コーチング 佐賀」で検索すると、トップはこの私のブログで、次はサッカースクールが出てきます。
佐賀県ではあまりコーチングが活発ではないみたいで寂しいので、こういった活動を通して佐賀でもコーチングを広げていきたいと考えています。
ラベル:コーチング 佐賀
posted by 岩永 at 12:24| Comment(1) | TrackBack(1) | コーチング | このブログの読者になる | 更新情報をチェックする

2011年01月29日

Wimaxをトライ中

3か月ほど出張中です。
出張のお供にノートパソコンとiPod Touchを持ってきてます。

iPod Touchは2010年9月に出た第4世代のやつです。
今まで持っていたのは5年前に購入した動画が見られないiPodですので、一気にできることが増えました。

新しいiPodはとても楽しいです。音楽を聴くだけでなく、メールを読んだりWebをブラウズしたりゲームをしたりスケジュールを管理したり、新聞を読んだり。

iPhoneを買った人がiPhoneを絶賛するのを「熱くなりやすい人だな」と冷めた目で見ていましたが、間違っていました。ごめんなさい。
出張前は家の無線LAN環境でメールやニュースを取りこんで、通勤途中や昼休みに見るようにしていましたが、出張先では有線LAN環境しかなく、ちょっと物足りなく感じていました。

で、物欲に負けてモバイルWifi環境を手に入れようと考えてみました。
ただし、出張が終わったら使わなくなるかもしれないので、基本料金は安い方がいい。

・選択肢その1 EMOBILEのPocketWifi
iPod Touch購入時にも強く勧められたので、真っ先に思いつきました。
しかし、2年縛り必須なのと、販売店で相談するときにお勧めプランじゃない契約プランを望んでることを匂わせると、とたんに店員のやる気がなくなるのでパス。

・選択肢その2 携帯電話のテザリング
auの携帯電話を使っているのですが、携帯電話を無線LANルータにできるNEXfiというものが去年発売されているので調べてみたところ、私の携帯では使えないことが判明。
IS04以降のアンドロイド携帯もテザリングできるらしいけど、こちらは発売時期が分からないのでこれもパス。

・選択肢その3 UQ Wimax
上記2つの選択肢がつぶれて、ようやく思い至ったのがUQ Wimax。しかも「Try Wimax」という無料で15日間試せるキャンペーンもある。

ということで、早速Try Wimaxを試してみました。
端末はURoad-7000SSというやつ。
感想は「なかなかいい。いや、すごくいい」
設定はほとんどないと言っていいし、iPod Touchから使う分には速度的にはまったく問題ない。
3日ほどで、ほとんど手放せなくなりました。

もともといろんなアプリが充実しているので、RSSリーダーだろうがメールだろうがゲームのダウンロードだろうがTwitterだろうがWebのブラウズだろうができないことはほとんどありません。
携帯のWebでできることはすべて置き換わりました。
Twitterはつぶやく数が飛躍的に増えましたね。
しかも、携帯サイトだとニュースとか乗換案内なんかが「これ以上の機能は(有料の)会員登録を」というのが、iPod Touchからだと通常のネット利用になるので不要。
煩わしい思いをしなくて済むようになりました。
これも大きい。

一方で、携帯に比べると電波が利用できない場面がちょっと多いです。
例えば、地下鉄のホームとか。これは後発の事業者だからしょうがないかも。
あと、入り口がせまいお店でちょっと奥に入った場合も電波が届かない場合がありました。

あとは電池の持ちが悪い。今回利用したURoad7000SSだと連続使用可能時間は3.5時間です。
これは通勤中と休み時間だけ使うようにして、あとは電源を切っておくことでしのぎました。
最近は8時間使用可能な端末も出たようなので、それに期待ですかね。

たぶんTry Wimaxのお試し期間が終わったら契約すると思います。
万一出張が終わって使わなくなっても、2年とか無駄に長い縛りがないのがいいですね。
posted by 岩永 at 00:29| Comment(0) | TrackBack(0) | テクノロジー | このブログの読者になる | 更新情報をチェックする

2010年11月14日

消費者力検定を受験しました。

以前新聞社さんから取材を受けたのもあるし、数年は続けて受験した方がいいかなと思って今年も消費者力検定を受験しました。
今年はあんまり勉強する時間が取れなくて、去年の問題集と試験問題だけで勉強しました。
もしかしたら去年より成績が悪いような心配もあります。

少しずつ知識は増えていると思うので、成績は発表(12月らしいです)までのお楽しみということで待ちたいと思います。
ラベル:消費者力検定
posted by 岩永 at 00:00| Comment(0) | TrackBack(0) | 子供の金銭教育 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。