« エラー メッセージ "Generic Host Process" が表示されるという問題が修正されます。 | トップページ | 覇 信長記 8 燃ゆる信長:羅門 祐人, 中岡 潤一郎 »

2005年6月19日

trackbackcheck.py トラックバックして来た記事にこちらへのリンクがあるかどうか調べる

Python スクリプト。

u'''trackbackcheck.py

ココログの記事へのトラックバック一覧を取得し、その記事
(あるいはトップページ)へのリンクの有無を表示する。
'''
import xmlrpclib
import time
import datetime
import calendar
import urllib
import htmllib
import formatter

import account #以下の形式のモジュールを作って同一フォルダに置く ### account.py
##URL = 'http://tuchinoko.moe-nifty.com/oboegaki/' # あなたのココログ URL
##ACCOUNT = 'hoge' # ココログアカウント
##PASSWORD = '????????' # パスワード
__author__ = 'kadotanimitsuru' __date__ = '2005-06-19' __license__ = 'public domain' __version__ = '1.0.0' _MAXTITLES = 0 # 取得する記事の最大数。0 だと限界無し(?) class _MovableType(object):
    u'''
    Movable Type XML-RPC API を仮想化する

    参考:Movable Typeユーザー・マニュアル: プログラミングインターフェイス
    http://www.movabletype.jp/manual/mtmanual_programmatic.html
    '''
    def __init__(self, url, account, password):
        self.URL = url
        self.ACCOUNT = account
        self.PASSWORD = password
        self.server = xmlrpclib.ServerProxy(self.entrypoint)
        for i in self.server.blogger.getUsersBlogs("", account, password):
            if i['url'] == url:
                self.blogid = i['blogid']
                self.blogName = unicode(i['blogName'])
                break         else:
            raise '%s not found.' % url
        self._dounload_posts()
    def _dounload_posts(self):
        u = self.server.blogger.getUserInfo('', self.ACCOUNT, self.PASSWORD)
        self.nickname = unicode(u['nickname'])
        print self.nickname, "'s blog:", self.blogName
        posts = self.server.metaWeblog.getRecentPosts(
            self.blogid, self.ACCOUNT, self.PASSWORD, _MAXTITLES)
        print '%d posts.' % len(posts)
        self.posts = []
        for post in posts:
            pings = self.server.mt.getTrackbackPings(post['postid'])
            if pings:
                for i in pings:
                    pingurl = i['pingURL']
                    a = get_anchorlist(pingurl)
                    if post['link'] in a or self.URL in a:
                        i['link'] = True                         print 'o',
                    else:
                        i['link'] = False                         print 'x',
                post['trackbackPings'] = pings
                self.posts.append(post)
            else:
                print '.',
        print '' class Cocolog(_MovableType):
    u'''
    ココログに固有の設定を切り出すクラス。
    ここを変えれば MovableType(TypePad)全般でイケるかも。
    '''
    UTC_OFFSET = datetime.timedelta(hours=9) # UTC との時差     # ココログのように内部が UTC で表記が日本時間の場合に必要。
    # どちらもローカルタイムで統一されている場合は 0 で良いはず。
    def __init__(self, url, account, password):
        self.entrypoint = 'http://app.cocolog-nifty.com/t/api'         # ココログのエントリーポイント。blog に応じて書き換えるべし。
        _MovableType.__init__(self, url, account, password)     def getdate(self, post):
        u'''
        -> time.localtime

        'YYYY-MM-DDThh:mm:ssZ' である日時フォーマット専用。
        ココログ以外の違う形式の日付の blog なら書き換える事。
        '''
        return  time.localtime(calendar.timegm(
            time.strptime(str(post['dateCreated']).rstrip('Z')+'UTC',
                          '%Y-%m-%dT%H:%M:%S%Z')))
def get_anchorlist(url):
    u'''
    HTML 内にある a 要素の href 属性を取得しリストにして返す
    '''
    p = htmllib.HTMLParser(formatter.NullFormatter())     try:
        p.feed(urllib.urlopen(url).read())
    except Exception, e:
        print e
        a = []
    else:
        a = p.anchorlist
    return a
if __name__=='__main__':
    account, password, url = account.ACCOUNT, account.PASSWORD, account.URL
    print url
    c = Cocolog(url, account, password)
    for post in c.posts:
        print '%04d-%02d-%02d %02d:%02d:%02d %s' % (
            c.getdate(post)[:6]+(unicode(post['title']),))
        print post['link']
        for i in post['trackbackPings']:
            if i['link']:
                print u'o\t%s' % unicode(i['pingTitle'])
            else:
                print u'x\t%s' % unicode(i['pingTitle'])
                print '\t%s' % i['pingURL']
# 好きに流用してください。

昔のスクリプトから使いまわしているので投稿一覧を取得するだけのためにわざわざクラスを作る大げさな代物になってしまっています。流用する時は適当に端折った方がいいでしょう。

« エラー メッセージ "Generic Host Process" が表示されるという問題が修正されます。 | トップページ | 覇 信長記 8 燃ゆる信長:羅門 祐人, 中岡 潤一郎 »

Python」カテゴリの記事

ウェブログ・ココログ関連」カテゴリの記事

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68856/4617539

この記事へのトラックバック一覧です: trackbackcheck.py トラックバックして来た記事にこちらへのリンクがあるかどうか調べる:

« エラー メッセージ "Generic Host Process" が表示されるという問題が修正されます。 | トップページ | 覇 信長記 8 燃ゆる信長:羅門 祐人, 中岡 潤一郎 »

ブログ妖精

  • ココロ

Affiliate

無料ブログはココログ