結構前から,Twitter の1日分のつぶやきを,毎晩自動的に WordPress へ投稿するようにしてたけど,
- 画像のサムネイルを表示してくれない
- リスト表示は正直見栄えが悪い
- 時々マルチポストされてしまっている
などの理由により,別のものを探すか,自分で作りたいと思っていた.
最近,Python の勉強を始めたので,練習がてら,作ってみた.
作ったと言っても,自分で作ったのはTwilogからソースを取ってきて,成形してポストするところだけ.
サムネイルの取得とか,あとリンクを張ったりだとかの処理は面倒なので,全部Twilogからそのまま持ってくる事にw
#!/usr/bin/env python # fileencoding=utf-8 """ wp-twilog 指定された日付のtweetをtwilogから取得し,投稿する """ ''' HTMLの実体参照文字をUnicode文字へ変換する ''' def ref2uni(s): from htmlentitydefs import name2codepoint as entitydic try: s = s.decode('utf-8') except UnicodeEncodeError: pass s = s.replace('<', unichr(entitydic['lt'])) s = s.replace('>', unichr(entitydic['gt'])) s = s.replace('"', unichr(entitydic['quot'])) s = s.replace('&', unichr(entitydic['amp'])) return s.encode('utf-8') ''' twilog.org からデータを取得し,返す ''' def getTweet(user, date, type = '', IncRep = False): import urllib import re # まず一覧を更新 refleshurl = 'http://twilog.org/update.cgi?id=%s&order=&filter=&kind=reg' tmp = urllib.urlopen(refleshurl % user) tmp.readlines() tmp.close() baseurl = 'http://twilog.org/source.cgi?id=%s&date=%s&order=asc&word=&cate=&filter=%s&type=%s' reg = re.compile('^<') return [ref2uni(s) for s in urllib.urlopen(baseurl % (user, date, '' if IncRep else 'norep', type)) if reg.match(s)] ''' WordPress へ記事を投稿する ''' def postNewEntry(title, desc, time): import xmlrpclib cate = ['twitter'] tags = ['twilog'] poweredby = '<p style="text-align: right;"><span style="vertical-align: top;">Powered by </span><a href="http://twilog.org/" target=_blank><img src="http://www.tokcs.com/wordpress/wp-content/uploads/2010/02/banner-t.gif" alt="twilog" /></a></p>' desc.append(poweredby) wp = xmlrpclib.ServerProxy('http://tokcs.com/wordpress/xmlrpc.php') param = { 'title' : title, 'description' : ''.join(desc[:5]), 'mt_text_more': ''.join(desc[5:]), 'dateCreated' : xmlrpclib.DateTime(time), 'categories' : cate, # 'mt_keywords' : tags, 'wp_slug' : 'tweets' } return wp.metaWeblog.newPost('0', 'twitter', 'twitter_bot', param, 1) ''' 前日のつぶやきを投稿する ''' def wpTwilog(): from datetime import datetime, timedelta postdate = datetime.now() - timedelta(0, datetime.now().second, 0, 0, datetime.now().minute, datetime.now().hour) yesterday = postdate - timedelta(1) desc = getTweet('freiheit_tokkyu', yesterday.strftime('%y%m%d'), 'p') if len(desc) != 0: ret = postNewEntry(yesterday.strftime('%Y年%m月%d日のつぶやき'), desc, (postdate - timedelta(0,0,0,0,0,9))) if __name__ == '__main__': wpTwilog() # user = raw_input('user> ') # date = raw_input('date> ') # type = raw_input('type> ') # if user == '': # wpTwilog() # else: # tweets = getTweet(user, date, type) # print 'raw data' # print tweets
あとはこれを cron で自動的に実行してやるだけ.
今のところ問題なく動いている.
今は,同じような事をプラグインで実現しようと,PHPにて組み直し中.
ただし,次は Twilog は使わずに,きちんと Twitter API を使って取得してくる.
Twilog は Geotag に対応してないからなー.今度作るものは,逆ジオコーディングを使って,地点名と Google Maps へのリンクを貼るようにしたい.
現在,Python と同じく,最近勉強を始めた Mercurial で管理しつつ,ちまちまと進行中.
ピンバック: wordpressへhatenaブログ記事の自動投稿 | FiFiFactory Official Page
ピンバック: え、つぶやきが勝手にブログになる? Twilogっていいかも - バンコク発!新イマジン・ハッピー・ライフ
ピンバック: え、つぶやきが勝手にブログになる? Twilogっていいかも
ピンバック: え、つぶやきが勝手にブログになる? Twilogっていいかも - タイの田舎の小さな家からイマジン・ハッピー・ライフ