簡単なスクリプトとか

これは何?

del.icio.usのブックマークをはてなブックマークに移すPHPスクリプトです。

コード

<?php

//2006.12.30:デバッグ表示が出来るように改良

ob_start();

print '<b>Start Error Check</b><br />';


$incHatena =  include_once( 'Services/Hatena.php' );
$incHttp =  include_once( 'HTTP/Request.php' );

define('PATTERN','/<(DT|DD)>((<A HREF="([^<>]+)" LAST_VISIT="([^<>]+)" ADD_DATE="([^<>]+)" TAGS="([^<>]+)">([^<>]*)<\/A>)|(.*))/i');

print '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>';
print $incHatena  ? "OK: INCLUDE 'Services/Hatena.php'<br />" : "<b>Error: NOT INCLUDE 'Services/Hatena.php'</b><br />";
print $incHttp ? "OK:  INCLUDE 'HTTP/Request.php'<br />" : "<b>Error: NOT INCLUDE 'HTTP/Request.php'</b><br />";

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

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

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


/**
 * del.icio.usでエクスポートしたファイルを解析
 */
print file_exists($bookmark) ? "OK: Exits Bookmark File<br />" : "<b>Error: NO Bookmark File</b><br />";
$html = file_get_contents($bookmark);

preg_match_all(PATTERN, $html ,$matches, PREG_SET_ORDER);
$len = count($matches);
print $len>1 ? 'OK: Get Bookmark Data<br />' : '<b>Error: NO Get Bookmark Data</b><br />';

//APIオブジェクト生成
$hatena = Services_Hatena::factory('Bookmark');
$hatena->hatena_login($user,$pass);
$total = 0;
print is_object($hatena) ? 'OK: Inctance Hatena<br />' : '<b>Error: Not Inctance Hatena</b><br />';
$start = false;
$bookmarks = array();
//古い順番に追加していく
for($i=$len-1; $i>=0; $i-- ){
    if(!$start){
        print '<b>Starting Export To Hatena</b><br />';
        $start = true;
    }
    
    //コメントパターンにマッチした時はcontinue
    if(strcasecmp($matches[$i][1],'DD') == 0){
        $comment = $matches[$i][9];
        unset($matches[$i]);
        continue;
    }
    //はてな式のタグに変換
    $matches[$i][7] = explode(',',$matches[$i][7]);
    $matches[$i][7] = '['.implode('][',$matches[$i][7]).']';
    
    $bookmarks[] =array(
        'url'=>$matches[$i][8],
        'title' =>$matches[$i][4],
        'tag' => $matches[$i][7],
        'comment' => $comment
        );
    
    $comment = '';
    $total++;
    unset($matches[$i]);
}
print 'Total Bookmark:'.$total.'<br />';
print '<b>Finish Check!</b><br />';
ob_flush();
flush();
foreach($bookmarks as $i => $data){
   
    //APIで追加する
    $hatena->add_bookmark($data['title'],$data['tag'].$data['comment']);
    
    //簡単な経過表示
    print '<b>Finish '.($i+1).'/'.$total.'</b><br>';
    print "
    <pre>
    title:{$data['title']}
    url:{$data['url']}
    tag:{$data['tag']}
    comment:{$data['comment']}
    </pre>
    ";
    ob_flush();
    flush();
    //はてなサーバーにも、実行する共有サーバーにも、怒涛のリクエストでサーバーに迷惑を掛けては申し訳ないので、スリープ
    sleep(3);
}

?>

使用方法

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