2012/04/06

AKB48を分析する - 5.twitterからデータを取得

Google+からデータを取得する方法がだいぶわかってきたので、今度はtwitterに挑戦する。
twitterの検索機能を使ってみる。

下記のページを参考に、あらかじめpythonからtwitterにアクセスするための準備をしておく。

1.Keyの取得
http://blog.hogeo.jp/2011/05/how-to-make-twitter-bot-python-twitter.html

2.モジュールpython-twitterの取得
http://code.google.com/p/python-twitter/

3..python-twitterの基本的な使い方を覚える
http://blog.hogeo.jp/2011/05/python-twitter-api-python-twitter-part2.html


4.検索キーワードで日本語を使うやり方を覚える
twitterから特定のキーワードで検索するには、api.GetSearch()を使う。
ここで、キーワードに日本語を使いたい場合、一工夫必要。リクエストのURIに日本語の文字列を渡す場合、文字コードの変換が必要である。こちらを参考にした。
http://d.hatena.ne.jp/yamahei7/20110520/1305871361


作ったコードはこちら。
keywords に好きなキーワードを設定してみよう。


http://www.mycodestock.com/code/5704/


twitterへのapi経由のアクセスは、件数の制限あるので、
statuses = api.GetSearch(keyword, per_page=30, page=1, lang='ja')
のper_page,pageの数値は調整していってください。langで言語が指定できる。

2012/04/04

AKB48を分析する - 3.AKB48のメンバーリストをMongoDBに突っ込む

下記のPython スクリプトで、メンバーのIDをAKB48 on google+のサイトからゲットし、やすす等スタッフのIDを加えてMongoDBにinsertできる。
BeautiflSoupというモジュールを使ってサイトからgoogle+のメンバーIDを抽出している。このモジュールはこういた処理をするときの定番みたいです。
_idという項目が、リレーショナル・データベースでいうところのプライマリーキーの役割をはたすもので、これは指定しないとMongoDBが自動的に採番する。リランしたときにデータが重複しないように、google+のIDを_idにセットするようにしている。

次は、このレコードを読み、google+のアクティビティを取得するプログラムを作る予定です。

#! c:/Python26/python.exe
# coding: utf-8 

import pymongo #@UnresolvedImport
from pymongo import Connection #@UnresolvedImport
from BeautifulSoup import BeautifulSoup #@UnresolvedImport
import urllib

def ggtsidlist_make():
    soup = BeautifulSoup(urllib.urlopen("http://www.google.com/intl/ja/+/project48/").read())
    lisoup=[]
    ggtsidlist = []
    for lisoup in soup.findAll("li"):
    
        try:
            ggtsidlist.append(lisoup['data-gplusid'])
        except:
            continue
    ggtsidlist.append('113474433041552257864') #やすす
    ggtsidlist.append('108897254135232129896') #よすす
    ggtsidlist.append('112435502021367429566') #しのぶ
    ggtsidlist.append('113091703821013997975') #木島
    ggtsidlist.append('103803814106571203433') #北川 
    
    return ggtsidlist

if __name__=='__main__':
    con = Connection()
    ggts = con[u'ggts']
#    con.ggts.ggtsid.remove()
    record = {}
    ggtsidlist = ggtsidlist_make()
    for ggtsid in ggtsidlist:
        record = {u'ggtsid':ggtsid,u'_id':ggtsid}
        print record 
        con.ggts.ggtsid.insert(record)

AKB48を分析する - 4.Google+のデータを取得する

Google+におけるAKB48メンバーの投稿(アクティビティ)と、それに対するコメント(メンバーのみ)を取得し、MongoDBにインサートするPythonプログラムを作成した。
これを実行し、数時間経つと、私のPCにすべてのデータが格納されるのだ!

次はこれを使ってどういう分析をするかだな。

ソースコードは、mycodestockというサービスを使って公開している。
このサービス、ちょっとしたコードを書いて保存しておくのに便利だ。

1.Google+ AKB48 ProjectからメンバーのID一覧を取得する
http://www.mycodestock.com/code/5672/

1.1.BeautifulSoup を使用して、Google+ AKB48 ProjectのhtmlからメンバーのIDを抽出
1.2.PyMongo を使用してPythonのスクリプトからMongoDBにデータをinsertする
1.3.MongoDBで、RDBにおけるプライマリーキーの働きをする'_id'という項目にIDをセットする
 これにより、リランしてもデータが重複しないようにする

2.アクティビティを取得する
http://www.mycodestock.com/code/5673/

2.1.dateutil.parser を使用してRFC3339形式で格納されているアクティビティの投稿日付、更新日付をPythonのdatetime型に変換し、PyMongo上の項目として追加する。これは後々日付別の分析を簡単にするため
2.2.あとのテックニックは1.2と1.3を使う

3.コメントを取得する
http://www.mycodestock.com/code/5674/

3.1.Activity IDからCommentを取得する際、対象の日付を絞る。こうしないととっても時間がかかる。最初に実行するときはすべての日付を取得するようにするが、2回目以降は前日以降のActivityのみ対象とする。
この際、Pythonのdatetime型の日付と、Google+のRFC3339形式のデータを比較するため、rfc3339.pyというスクリプトを使う

3.2.あとのテックニックは1.2と1.3を使う