WordPressでGoogleブックマークみたいなこと(1)


先日から我が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>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>