自分の過去ツイートを取得してみたら数が合わなかったがツイ消しのせいだった。
タイトルのとおり。
3200件のツイートを取得出来るはずが、数件取得できなかった。
ツイ消しした分が取得できないのかなーと思い、ツイ消ししてから取得するとツイ消しした分だけ所得件数が減ったのでそうだと思われる。
ツイ消ししても、ツイートがあったことは認識したままで、ツイ消しの分を3200の中に数えてしまうからこういう結果になるんだろう。
ツイートを取得するにあたり、なんとなくwxPythonを使ったGUIプログラムを書いたのでそのコード。
# coding: UTF-8 import wx import tweepy import sqlite3 consumer_key = "************" consumer_secret = "************" accessfile = 'twitter.dat' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) class MainFrame(wx.Frame): api = None lastid = None def __init__(self, *args, **kwds): kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.button_refresh = wx.Button(self, -1, u"更新") self.button_auth = wx.Button(self, -1, u"認証") self.list_box_timeline = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE | wx.TE_READONLY) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.onClickRefresh, self.button_refresh) self.Bind(wx.EVT_BUTTON, self.onClickAuth, self.button_auth) self.OAuth() def __set_properties(self): self.SetTitle("extract_tweet") self.list_box_timeline.SetMinSize((250, 200)) def __do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.Add(self.button_refresh, 0, 0, 0) sizer_2.Add(self.button_auth, 0, 0, 0) sizer_1.Add(sizer_2, 0, wx.EXPAND, 0) sizer_1.Add(self.list_box_timeline, 1, wx.EXPAND, 0) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout() def onClickRefresh(self, event): conn = sqlite3.connect("./tweetsql") #接続 cur = conn.cursor() #カーソルの作成 cur.execute("""CREATE TABLE IF NOT EXISTS mystatus(statusid long, postdate text, text text, replyto text, replyto_id logn, reply_status_id, primary key (statusid) ON CONFLICT IGNORE)""") #テーブルが存在しない場合はテーブルを作成 cur.execute("SELECT max(statusid) from mystatus") #最大のstatusidを抽出 maxsaved = cur.fetchone()[0] if not maxsaved: maxsaved = 1 count = cur.execute("SELECT statusid FROM mystatus") self.list_box_timeline.WriteText(u"before: "+str(len(count.fetchall()))+u"tweets\n") #リストにtweet数を追加する。 print "max saved id = " + str(maxsaved) maxcount = -1 for p in tweepy.Cursor(self.api.user_timeline, since_id=maxsaved).items(maxcount): #新しいtweetを追加 cur.execute("""INSERT INTO mystatus(statusid, postdate, text, replyto, replyto_id,reply_status_id) VALUES(?,?,?,?,?,?)""",(p.id ,p.created_at, p.text, p.in_reply_to_screen_name, p.in_reply_to_user_id, p.in_reply_to_status_id)) print p conn.commit() #変更を保存 count = cur.execute("SELECT statusid FROM mystatus") self.list_box_timeline.WriteText(u"after: "+str(len(count.fetchall()))+u"tweets\n") #リストにtweet数を追加する。 conn.close() #切断 event.Skip() def onClickAuth(self, event): ''' AccessTokenとAccessToken Secretを取得しシリアライズ ''' import webbrowser import pickle # get_authorization_urlが時間がかかるのでInfo ret = wx.MessageBox(u'認証結果が返って来るまで時間がかかるかもしれません。\n実行しますか?', u'認証', wx.OK|wx.CANCEL|wx.ICON_QUESTION) if ret != wx.OK: event.Skip() return redirect_url = auth.get_authorization_url() webbrowser.open(redirect_url) box = wx.TextEntryDialog(None, u'PIN番号を入力してください。') if box.ShowModal() == wx.ID_OK: auth.get_access_token(box.GetValue()) access_token = (auth.access_token.key, auth.access_token.secret) afile = open(accessfile, 'w') pickle.dump(access_token, afile) afile.close() event.Skip() def OAuth(self): '''OAuthによる認証''' import os import pickle if os.path.exists(accessfile): file = open(accessfile) access_token = pickle.load(file) auth.set_access_token(access_token[0], access_token[1]) self.api = tweepy.API(auth_handler=auth, api_root = "/1.1") if __name__ == "__main__": app = wx.App(False) wx.InitAllImageHandlers() frame = MainFrame(None, wx.ID_ANY, "") app.SetTopWindow(frame) frame_wxTweepy.Show() app.MainLoop()
・参考
http://www.kabipan.com/computer/twitterwxPythonでTwitterクライアントを作ってみた。 - その時々