last-modified: 2006-12-31 (日) 11:35:20 (1343d)[変更箇所]
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);
}
?>