先日から我がMacのFirefox上のGoogleツールバーがまともに動かなくなった。
それで従来から使っていたGoogleブックマークがまともに使えなくて、めっちゃストレスがたまる事態に!
Web開発の仕事は、ほとんどのブラウザを使用するので、これじゃー仕事にならんと思い、ブックマークレットでブックマークみたいなことをすればいいんだという結論に達した。
ブックマークレットならGoogleツールバーみたいなブラウザのアドオンに頼る必要がないので、まさにクラウドではないか!
といわけでWordPressのリンク機能をブックマークレットで出力するプラグインを作ることにした。
XBELって?
ブックマークのデータをどのように出力するかをいろいろ検討した結果、XBELというフォーマットを使用することにした。
“NETSCAPE-Bookmark-file-1″というフォーマットもあるらしいのだが、こいつはValidなXMLではないので、JavaScriptとかPHPでパースするのにいかにもめんどくさそうだぞということでボツ。
WordPressのリンクをXBELで出力する
とりあえず本日はWordPressのリンクをXBELで出力するところまではできた。
この週末辺りにJavaScriptのブックマークレットを作る予定。
<?php
/*
Plugin Name: Online Bookmark
Plugin URI: http://firegoby.jp/wp/obookmark
Description: Online Bookmark like Google Bookmark.
Author: Takayuki Miyauchi
Version: 0.1
Author URI: http://firegoby.jp/
*/
add_filter('query_vars', array('onlineBookmark', 'query_vars'));
add_filter('rewrite_rules_array', array('onlineBookmark', 'rewrite_rules_array'));
add_action('init', array('onlineBookmark', 'init'));
add_action('wp', array('onlineBookmark', 'wp'));
class onlineBookmark{
function init(){
global $wp_rewrite;
$rules = $wp_rewrite->wp_rewrite_rules();
if (!isset($rules['bookmark.xbel$'])) {
$wp_rewrite->flush_rules();
}
}
function rewrite_rules_array($rules){
global $wp_rewrite;
$new_rules['bookmark.xbel$'] = $wp_rewrite->index . '?bookmark=1';
$rules = array_merge($new_rules, $rules);
return $rules;
}
function query_vars($vars) {
$vars[] = 'bookmark';
return $vars;
}
function wp(){
if (get_query_var('bookmark')) {
global $user_login;
$hide = 1;
if ($user_login) {
$hide = 0;
}
header('Content-type: text/xml; charset=UTF-8');
print "<xbel>\n";
$cats = get_terms('link_category');
foreach ($cats as $cat) {
print "<folder>\n";
print "<title>{$cat->name}</title>\n";
$params = array(
'category' => $cat->term_id,
'hide_invisible' => $hide,
);
$bookmarks = get_bookmarks($params);
foreach ($bookmarks as $b) {
print "<bookmark href=\"{$b->link_url}\">";
print "<title>{$b->link_name}</title>";
print "<desc>{$b->link_description}</desc>";
print "</bookmark>";
}
print "</folder>\n";
}
print "</xbel>";
exit;
}
}
}
?>
以上のソースをプラグインとして使用すると、
http://example.com/bookmark.xbel
にアクセスした際に以下のようなXMLが出力される。
だからといって、今日の時点では何の役にもたたない。。。
<xbel>
<folder>
<title>ブログロール</title>
<bookmark href="http://www.yahoo.co.jp/">
<title>Yahoo! JAPAN</title>
<desc>Yahoo! JAPANのウェブサイト</desc></bookmark>
</folder>
<folder>
<title>検索エンジン</title>
<bookmark href="http://www.google.co.jp/">
<title>Google</title>
<desc>グーグルのウェブサイト</desc>
</bookmark>
</folder>
</xbel>