PHP > del.icio.usからはてブにエクスポートするスクリプト

2006年11月03日

はてブにdel.icio.usのブックマークを移したいなとずっと思ってたんだけど、 簡単にコンバート出来そうなツールもなかったのでPHPで書きました。

それPlaと言われそうだけど気にしない。 使いたい人は自己責任の元で好きに使って下さい。

2006.12.30追記。
このエントリーのスクリプトは古くなってます。最新版はWikiからどうぞ。 http://wiki.37to.net/index.php?del2hatebu


<?php
require_once 'Services/Hatena.php';

define('PATTERN','/<(DT|DD)>((<A HREF="(.+)" LAST_VISIT="(.+)" ADD_DATE="(.+)" TAGS="(.+)">(.+)?<\/A>)|(.+))/');

/**
 * del.icio.usでエクスポートしたhtmlファイルのパス
 * https://secure.del.icio.us/settings/ユーザー名/bookmarks/exportから取得して保存
 */
$bookmark '';

/**
 * はてなのログインユーザー名
 */
$user '';

/**
 * はてなのログインパスワード
 */
$pass '';


/**
 * del.icio.usでエクスポートしたファイルを解析
 */
$html file_get_contents($bookmark);
preg_match_all(PATTERN$html ,$matchesPREG_SET_ORDER);
$len count($matches);

//APIオブジェクト生成
$hatena Services_Hatena::factory('Bookmark');
$hatena->hatena_login($user,$pass);

//古い順番に追加していく
for($i=$len-1$i>=0$i-- ){
    //コメントのマッチしたパターンがコメント時はcontinue
    if($matches[$i][1] === 'DD'){
        continue;
    }
    
    //はてな式のタグに変換
    $matches[$i][7] = explode(',',$matches[$i][7]);
    $matches[$i][7] = '['.implode('][',$matches[$i][7]).']';
    
    //コメントがあれば追加
    if($matches[$i+1][1] == 'DD'){
        $matches[$i][7] .= $matches[$i+1][9];
    }
    
    //APIで追加する
    $hatena->add_bookmark($matches[$i][4],$matches[$i][7]);
    
    print <<<PRINT
    <pre>
    title:{$matches[$i][8]}
    url:{$matches[$i][4]}
    tag:{$matches[$i][7]}
    </pre>
PRINT;

    //怒涛のリクエストでサーバーに迷惑を掛けては申し訳ないので、スリープ
    sleep(3);
    
    //簡単な経過表示
    print '<b>'.$i.'/'.$len.'</b><br>';
}

?>


使い方

  1. PHPが動く環境に上記スクリプトを保存
  2. Pearの「Services_Hatena」を使用しているので無ければインストールして下さい。
  3. スクリプトの変数、「$bookmark」「$user」「$pass」を自分の環境に書き換える
  4. del.icio.usのエクスポート機能を使って、htmlファイルをスクリプトが取得出来る場所に保存。
  5. いざ実行(はてなサーバーに負荷をかけないようにしている為、ブックマークの量によっては相当時間が掛かります。)

使ってみた感じ

del.icio.usのブックマーク1400ぐらいをエクスポートするのに大体1.5時間から2時間ぐらい掛かった。 sleepしなければもっと早く出来ると思うけど、悪質なクローラーと思われても困るので気長に待ちました。

メインで使うのはdel.icio.usになると思うので、あとはGreasemonkyでdel.icio.usとはてブの同期を取るようにしていけばいいかな。

気が向けばLivedoor クリップ版も作るかもです。

posted by 37to at : 13:45 | コメント (0) | トラックバック (0)

コメント

この記事に対するコメントはまだありません。


投稿する

投稿者情報を保存しますか?


トラックバック

トラックバックURI


一覧

この記事に対するトラックバックはまだありません。