The jonki

呼ばれて飛び出てじょじょじょじょーんき

jonTwit開発記 その2

PythonでCUIベースのTwitterクライアントを書いてみた。 の続き。

前回twitter.pyでimportしてるにも関わらず、自分でfriends_timelineとかBeautifuleSoupでパースしてましたw。
なんでtwitter.pyで提供されてる機能があったらそれに置き換えるようにしました。
機能はだいぶ増えたけどソースの長さはほとんど変わってないですよね。

あと前までログインしたあとにAPI認証くらってましたが、今回は初回ログイン時のユーザ&パスワードで自動にログインするようにしました。(といってもAPI使ってるだけだけど)

#暇があればいろいろ改造していく予定です。

実装機能

  • 発言投稿 (mode: i)
  • 最新タイムラインの取得 (mode: g)
  • 自分のタイムラインの取得 (mode: me)
  • 特定ユーザのタイムラインの取得 (mode: u)
  • @リプライの取得 (mode: @)
  • Dメッセージの取得 (mode: D)
  • フォローしてる人を取得 (mode: F)
  • フォローされてる人を取得 (mode: Fed)
  • 残りAPIカウントを取得 (mode: api)
取得数は最新10件ぐらいで打ちきってます。
悲しいけど、コレCUIなのよね。
あと、BeautifulSoupはAPIカウントを取得してXMLをパースするためだけに使ってます。
こんな機能必要ねぇー、って人はこの部分を削ってください。
BeautifulSoupをインストールしてなくても使えるようになります。


#!/usr/bin/python
#-*- coding: utf-8 -*-

#@author Junki OHMURA
#@date 2009/03/23
#@modified 2009/03/29
#@version 0.2


import twitter
import getpass
import urllib
import BeautifulSoup


'''
There are jonTwit's methods:
i: Twit mode
i->q: cancel Twit mode
g: get Timeline
q: terminate jonTwit
u: get user timeline
me: get friends
@: get replies
D: get Direct messsages
F: get Friends
Fed: get Followers
api: get remaining api-counts
help: HELP ME
'''

def main():

usrname = raw_input('Enter name: ')
passwd = getpass.getpass('Enter password: ')

tapi = twitter.Api(username=usrname, password=passwd)

while(1):
mode = raw_input('mode?: ')
if(mode == 'q'): #jonTwitを終了
break
elif(mode == 'i'): #Twitモード
twit = raw_input('twit?: ')
if(twit == 'q'): #Twitモードキャンセル
print 'back'
continue
tapi.PostUpdate(twit+' *jonTwit*') #送信
elif(mode == 'g'): #friends_timelineの取得
friends_timeline = tapi.GetFriendsTimeline()
ct=0
for friend in friends_timeline:
print friend.user.screen_name + ': ' + friend.text
ct = ct+1
if(ct>10):
break
elif(mode == 'u'): #他ユーザの発言を取得
usr = raw_input('whose timeline do u want to get?: ')
if(usr == 'q'): #キャンセル
print 'back'
continue
user_timelines = tapi.GetUserTimeline(user=usr)
ct=0
for user_timeline in user_timelines:
print user_timeline.user.screen_name + ': ' + user_timeline.text
ct = ct+1
if(ct>10):
break
elif(mode == 'me'): #user_timelineの取得
twits = tapi.GetUserTimeline()
ct=0
for twit in twits:
print usrname + ': ' + twit.text
ct = ct+1
if(ct>10):
break
elif(mode == '@'): #@リプライ取得
replies = tapi.GetReplies()
ct=0
for reply in replies:
print reply.user.screen_name + ': ' + reply.text
ct = ct+1
if(ct>10):
break
elif(mode == 'D'): #Dメッセージ取得
dmsges = tapi.GetDirectMessages()
ct=0
for dmsg in dmsges:
print dmsg.text
ct = ct+1
if(ct>10):
break
elif(mode == 'F'): #フォローしてる人を取得
friends = tapi.GetFriends()
ct=0
for friend in friends:
print friend.screen_name + ' / ' + friend.name
ct = ct+1
if(ct>15):
break
elif(mode == 'Fed'): #フォローしてくれてる人を取得
folloers = tapi.GetFollowers()
ct=0
for folloer in folloers:
print folloer.screen_name + ' / ' + folloer.name
ct = ct+1
if(ct>15):
break
elif(mode == 'api'): #残API回数の取得
url = 'http://twitter.com/account/rate_limit_status.xml'
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))
print '残/全: ' + soup.find('remaining-hits').string + '/' + soup.find('hourly-limit').string
elif(mode == 'help'): #ヘルプ
print 'i: Twit mode, i->q: cancel Twit mode, g: get Timeline, u: get user timeline, q: terminate jonTwit, me: get friends, @: get replies, D: get Direct messsages, F: get Friends, api: get remaining api-counts, Fed: get Followers, help: HELP ME'
else:
print '(´・ω・`)'


main()
print "(´∀`)ノシ" #バイバイ
exit(1)