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