del.icio.us からはてなブックマークへミラー

こちらスクリプトを利用して del.icio.us のエントリーをはてなブックマークミラーリングさせてみた。500エントリー以上あるために最初のミラーリングの途中でどちらかのサーバとコネクションに失敗してしまう。そこで、日付範囲を指定してミラーリングできるようにちょっとスクリプトをいじってみた。python は触ったことなかったけど、ちょっと面白いな。

はてなブックマークdel.icio.us よりもサーバが安定しているのでバックアップと、はてなブックマーク界隈の人のウォッチング用。機能的にはまだまだどちらも発展途上だけど、del.icio.us の方がまだ魅力的。

以下、スクリプトの変更箇所。mode を range にする。その場しのぎの Hack であれだけど、このスクリプトでは20日前のポストから100日前のポストまでを登録するようになっている。

  def postHatenaBookmark(self,mode='lastday',commentType='extended'):
    """
    postHatenaBookmark(mode,commentType)
       mode:インポートするdel.icio.usのブックマークを登録した期間
           all--すべてのdel.icio.usのブックマークをはてなブックマークにインポート
           それ以外 -- 前日に登録したdel.icio.usのブックマークをはてなブックマークにインポート

       commentType:コメントのタイプ
           tag_extend  -- [tag1][tag2]....+コメント
           tag -- [tag1][tag2]....
           それ以外--- コメント
    """
    if mode == 'all':
      posts = self.posts_all()
    elif mode == 'lastday':
      posts = self.getYesterdayData()

    if mode == 'range':
        for i in range(20, 100):
            date = datetime.date.today()
            td = datetime.timedelta(i)
            date = date - td;
            print "i, date = %d, %s\n" % (i, date.strftime("%Y%m%d"))
            posts = self.posts_get(date.strftime("%Y%m%d"));

            self.post(posts, commentType)
    else:
        self.post(posts, commentType)

  def post(self, posts, commentType):
    for post in posts:
      #コメントをcommmentType別に取得
      if commentType == 'tag_extended':
        #タグ+コメント
        comment = "[%s] %s" % (']['.join(post['tags'].split()),post['extended'])
      elif commentType == 'tag':
        #タグのみ
        comment = "[%s]" % ']['.join(post['tags'].split())
      else:
        #コメントのみ
        comment = post['extended']

      url = post['url'].encode('utf-8')

      if DEBUG:
        print "comment:%s\nurl:   %s" % (comment,url)

      print hatenaBookmark.postData(url,comment.encode('utf-8'))