Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
ラベル XML の投稿を表示しています。 すべての投稿を表示
ラベル XML の投稿を表示しています。 すべての投稿を表示

2011年9月12日月曜日

Google Bookmarks を RSS で取得

XML で取得

Google Bookmarks を XML で取得するには、

特定の単語を検索したい場合は、以下を追加。

&q=単語

例えば、`hoge’ を対象にしたい場合、

( cf. Google ブックマークを XML で取得 )

 

問題点

上記のデータ取得方法は、公式なやり方ではない。そのためか、単語を検索した結果が、以前とは変わってしまったようだ。

以前は、以下に示す内容だった。

<xml_api_reply version="1">
	<bookmarks>
		<bookmark>
			<title></title>
			<url></url>
			<timestamp></timestamp>
			<id></id>
			<labels>
				<label></label>
			</labels>
		</bookmark>

これが次のようになった。

<xml_api_reply version="1">
	<bookmarks>
		<title></title>
		<url></url>
		<timestamp></timestamp>
		<id></id>
		<labels>
			<label></label>
		</labels>

比較するとわかるように、<bookmark> タグがなくなった。これにより、各ブックマークの境界が不明となった。

 

RSS で取得

これでは困るので、XML での取得をやめ、RSS で取得することに変更。

ソースを見たい場合は、Firefox ボタン > Web 開発 > ページのソースを表示。

特定の単語を検索したい場合は、

この結果は、ブックマークの境界として <item> が使われている。

<?xml version="1.0" encoding="UTF-8"?>
	<rss version="2.0" xmlns:smh="http://www.google.com/history/" xmlns:recommend="http://www.google.com/history/items">
		<channel>
			<title>Google ブックマーク</title>
			<link>http://www.google.com/bookmarks/</link>
			<description>Google - ブックマーク RSS フィード</description>
			<smh:signature></smh:signature>
			<smh:homepage_label></smh:homepage_label>
			<item>
				<title></title>
				<link></link>
				<pubDate></pubDate>
				<category></category>
				<description></description>
				<guid isPermaLink="false"></guid>
				<smh:bkmk></smh:bkmk>
				<smh:bkmk_id></smh:bkmk_id>
				<smh:bkmk_title></smh:bkmk_title>
				<smh:bkmk_label></smh:bkmk_label>
			</item>

このデータを元に、DOM に変換したい場合は、「JavaScript で XML を読み込む」を参照。

 

関連記事

2009年9月27日日曜日

JavaScript で XML を読み込む

DOMParser で XML を DOM ツリーに変換する

Firefox で XMLを解析し、DOM ツリーを生成するには、DOMParser を使う。

Parsing and serializing XML – MDC によると、

Mozilla は現時点では W3C の Document Object Model Load and Save に対応していない ( bug 155749) ので、DOM ツリーをシリアライズおよびデシリアライズするには次の Mozilla 専用のインターフェイスを使うのが最も簡単です。…

  • DOMParser - XML を文字列から DOM ツリーにパースする

例えば、「名前」と「年齢」を含む XML から、名前のみを抽出する。

var theString = '<persons>' +
	'<person><name>太郎</name><age>20</age></person>' +
	'<person><name>次郎</name><age>25</age></person>' +
	'<person><name>花子</name><age>30</age></person>' +
	'</persons>';
var parser = new DOMParser();
var dom = parser.parseFromString(theString, "text/xml");
var persons = dom.getElementsByTagName("person");
for (var i=0; i<persons.length; i++){
	console.log(persons[i].getElementsByTagName("name")[0].textContent);
}

Firebug のコンソールで実行した結果は、

太郎
次郎
花子

XML に対して、HTML で要素を取得するときに使う getElementsByTagName メソッドを利用している。これは、getElementsByTagName メソッドが定義されている Document インターフェイスは、HTML と XML を表現したものであるため。

2009年9月26日土曜日

Google ブックマークを XML で取得

Google Bookmarks API Guide によると、

Google is a leader in the publication of its services through public interfaces such as the ones for Search, Google Maps, …. However, they have not yet published an API for Google Boomarks.

うーん、何で API が公開されていないのだろう。 (?_?) 不思議。。

上記に続いて、以下のようにリバースエンジニアリングした結果が書かれている。特定の基準で検索したい場合、以下のような URL にアクセス。

Lookup one record given a certain criteria

http://www.google.com/bookmarks/lookup?q=label:label2&output=xml

(同上より)

output=xml と付けると XML で返してくれるようだ。

試しに Google ブックマークで `hoge’ と検索したと想定して、以下の URL でアクセス。

http://www.google.com/bookmarks/lookup?q=hoge&output=xml

しかし、どうも結果が違う。 (@_@;)

 

普通に Google ブックマークで検索すると、上記 URL 中にある lookup ではなく find なので、

http://www.google.com/bookmarks/find?output=xml&q=hoge

に変更したらちゃんと表示された。

 

取得数

取得できるデータ数に関するパラメータについても説明があった。

XML Data Access

Parameters:

num=a large number (if parameter is ommited, only 25 bookmarks are returned)

(同上より)

先ほど表示できた URL の末尾に &num=100 と付けてアクセスしてみた。

http://www.google.com/bookmarks/find?output=xml&q=hoge&num=100

普通に検索したとき `hoge’ の検索が 25 件以上ある場合、100 件を上限に表示してくれるようだ。ただし、 num=3 のように小さい値にしても変化はなかった。

 

JavaScript でアクセス

上記を元に JavaScript でアクセスする。ただし、日本語で検索するときは URL エンコードするのを忘れずに。

var url = "http://www.google.com/bookmarks/find?output=xml&q=";
var q = "ほげ";
location.href = url + encodeURIComponent(q);