<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>橋本商会 &#187; REXML</title>
	<atom:link href="http://shokai.org/blog/archives/tag/rexml/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:32:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>RubyでFlickr APIのphotos.getInfoを呼ぶ</title>
		<link>http://shokai.org/blog/archives/1507</link>
		<comments>http://shokai.org/blog/archives/1507#comments</comments>
		<pubDate>Mon, 17 Mar 2008 08:39:46 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[REXML]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1507</guid>
		<description><![CDATA[Net::Flickrをインストールしたら、flickr.photos.getInfoメソッドが実装されてなかったので良い機会なので実装してみた。 flickr apiをrubyで使う &#8211; replore的日 [...]]]></description>
			<content:encoded><![CDATA[<p>
<p><a href="http://code.google.com/p/net-flickr/">Net::Flickr</a>をインストールしたら、<a href="http://flickr.com/services/api/flickr.photos.search.html">flickr.photos.getInfoメソッド</a>が実装されてなかったので良い機会なので実装してみた。<br /><br />
<a href="http://d.hatena.ne.jp/goinger/20070720/1184867418">flickr apiをrubyで使う &#8211; replore的日記</a>がとても参考になった。</p>
<p>FlickrAPIは普通にRESTなので、REXMLで取得してparseする。<br /><br />
今回自分で実装したのはgeotagまわりのため。FlickrのAPIの仕様でtagは小数点やハイフンが消されるので、その元の値を取るのにgetInfoメソッドが必要になる。Tagオブジェクトのrawからアクセスできるようにした。<br /><br />
使い方はphoto_idをコンストラクタに渡す。</p>
</p>
<blockquote><p><p>info = PhotoInfo.new(photo_id)<br /><br />
info.tags.each{ |tag|<br /><br />
puts tag.raw<br /><br />
}<br />
</p></p></blockquote>
<p>
<p>flickr-photos-getInfo.rb</p>
</p>
<blockquote><p><p>require&#8217;open-uri&#8217;<br /><br />
require&#8217;rexml/document&#8217;<br /><br />
require&#8217;cgi&#8217;</p>
<p>FLICKR_API_KEY=&#8217;your-api-key&#8217;</p>
<p>defflickr_call(method_name,arg_map={}.freeze)<br /><br />
args=arg_map.collect{|k,v|CGI.escape(k)<<'='<<CGI.escape(v)}.join('&#038;')<br /><br />
url=&#8221;http://www.flickr.com/services/rest/?api_key=%s&#038;method=%s&#038;%s&#8221;%<br /><br />
[FLICKR_API_KEY,method_name,args]<br /><br />
doc=REXML::Document.new(open(url).read)<br /><br />
end</p>
<p>classPhotoInfo<br /><br />
@xml_doc<br /><br />
definitialize(photo_id)<br /><br />
@xml_doc=flickr_call(&#8216;flickr.photos.getInfo&#8217;,'photo_id&#8217;=>photo_id)<br /><br />
end<br /><br />
deftags<br /><br />
tag_list=Array.new<br /><br />
REXML::XPath.each(@xml_doc,&#8217;//tag&#8217;){|tag|<br /><br />
tag_list<<Tag.new(<br /><br />
&#8216;id&#8217;=>REXML::XPath.first(tag,&#8217;attribute::id&#8217;),<br /><br />
&#8216;author&#8217;=>REXML::XPath.first(tag,&#8217;attribute::author&#8217;),<br /><br />
&#8216;raw&#8217;=>REXML::XPath.first(tag,&#8217;attribute::raw&#8217;),<br /><br />
&#8216;tag&#8217;=>tag.text<br /><br />
)<br /><br />
}<br /><br />
returntag_list<br /><br />
end<br /><br />
end</p>
<p>classTag<br /><br />
definitialize(args)<br /><br />
@id=args['id']<br /><br />
@author=args['author']<br /><br />
@raw=args['raw']<br /><br />
@tag=args['tag']<br /><br />
end<br /><br />
<br /><br />
defid<br /><br />
@id<br /><br />
end<br /><br />
<br /><br />
defauthor<br /><br />
@author.to_s<br /><br />
end<br /><br />
<br /><br />
defraw<br /><br />
@raw.to_s<br /><br />
end<br /><br />
<br /><br />
deftag<br /><br />
@tag.to_s<br /><br />
end<br /><br />
<br /><br />
defis_machine<br /><br />
if@tag=~/.+:.+=.+/<br /><br />
returntrue<br /><br />
else<br /><br />
returnfalse<br /><br />
end<br /><br />
end<br /><br />
<br /><br />
defis_geo<br /><br />
if@tag=~/geo:.+=.+/<br /><br />
returntrue<br /><br />
else<br /><br />
returnfalse<br /><br />
end<br /><br />
<br /><br />
end<br /><br />
end</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1507/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

