☆Twitter のタイムラインを逆順に表示する(3)

こんどはpython-twitter編です。
Ubuntu(Karmic使ってます)ならapt-getで入ります。
ドキュメントをみてもソースコードをgrepしてみてもリスト機能に対応していないようです。

ならば、継承して足せばよい、というわけでリストのタイムラインを取ってくる機能だけ追加してみました。
テストのために取ってきた情報を端末へ出力するコードも書いてあります。
xfterm4やgnome-terminalであればURLを右クリックしてブラウザで開けるので
これだけで簡易Twitterリーダーになります。
(取ってきた情報でHTMLを組み立てるのが面倒なだけです....)

これをやって気づいたのはアイコンの重要性。
誰が発言したかを見分けるのにとても役に立ってるんだと再認識しました。

引数は二つ、ユーザと取得数です。リストのタイムラインを取得したい場合は user/listのようにして指定します。

tw_list.py ubuntubot 50
tw_list.py MidSpecLowLoad/ubuntu-ittoke-doujou 50
出力の例
--------------------------------------------------------------------------------
ubuntubot : 2010-03-03 10:22:49 
Ubuntuのシステムディスクを交換 - こだわり、ときどき、やけくそ ...: UbuntuのCD-ROMから起動する。ここでは、日本語Remixのデスクトップ版を使う。 dumpと restoreをインストールする. /et... http://bit.ly/8YpApo
--------------------------------------------------------------------------------
ubuntubot : 2010-03-03 10:22:50 
Tue, Mar 02 on Twitter - doronkoのTwitterログ: Ubuntu 10.04はJailbreakなしでiPhoneにフルアクセス可能!? - ユーザー報告が話題 http://bit.ly/c... http://bit.ly/9E1fTD
--------------------------------------------------------------------------------
ubuntubot : 2010-03-03 12:41:55 
【レポート】 インストールしてから5分で動かせる - CUDAをサポートしたLinuxが登場: マイコミジャーナル
FedoraやRHEL、Ubuntuなどと比べ、システム開発などにおいて不要なプロセスやサービスを停止させること... http://bit.ly/cPOHG6
--------------------------------------------------------------------------------
ubuntubot : 2010-03-03 14:35:21 
「Ubuntu 10.04」アルファ第3版で大発見--iPhoneやiPod touchに対応するとのユーザー報告: 現在アルファ第3版の状態にあるUbuntu 10.04(開発コードLucid Lynx)がiPhoneやiPo... http://bit.ly/dvFHJk
--------------------------------------------------------------------------------
ubuntubot : 2010-03-03 16:36:56 
仮想HD(VHD)を使うための準備 ≪ むずかしいことはわかりません: ステップ実行してるとこのまま実行してやりたい衝動にかられるけど、ここで我慢しないと今までの時間が無駄になる 19 hours ago; ものは試しと ubu... http://bit.ly/b5Bmgx

2010/03/07 引数チェック追加
tw_list.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import codecs
import simplejson
import twitter
import time

class ApiSupportsList(twitter.Api):
  def GetUserListTimeline(self, user=None,ulist=None, count=None, since=None, since_id=None):
    try:
      if count:
        int(count)
    except:
      raise twitter.TwitterError("Count must be an integer")
    parameters = {}
    if count:
      parameters['per_page'] = count
    if since:
      parameters['since'] = since
    if since_id:
      parameters['since_id'] = since_id
    if not user and not self._username:
      raise twitter.TwitterError("User must be specified if API is not authenticated.")
    else:
      user = user if user else self._username
      url = 'http://api.twitter.com/1/%s/lists/%s/statuses.json' % (user, ulist)   
    json = self._FetchUrl(url, parameters=parameters)
    data = simplejson.loads(json)
    self._CheckForTwitterError(data)
    return [twitter.Status.NewFromJsonDict(x) for x in data]

sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
api = ApiSupportsList()

argv = sys.argv
argv.pop(0)
user, count = argv

if user.count('/') == 1:
  user, group = user.split('/')
  statuses = api.GetUserListTimeline(user,group,count)
else:
  statuses = api.GetUserTimeline(user,count) 

statuses.reverse()
for status in statuses:
  print '-' * 80
#  print '%s : %s (%s)' % (status.user.screen_name, time.strftime('%F %T',time.localtime(status.created_at_in_seconds)), status.relative_created_at)
  print '%s : %s ' % (status.user.screen_name, time.strftime('%F %T',time.localtime(status.created_at_in_seconds)))
  print status.text
  

0 件のコメント:

コメントを投稿