<?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>planet-ape&#124;blog &#187; API</title>
	<atom:link href="http://www.planet-ape.net/blog/archives/tag/api/feed" rel="self" type="application/rss+xml" />
	<link>http://www.planet-ape.net/blog</link>
	<description>We Love WordPress</description>
	<lastBuildDate>Sun, 20 Nov 2011 09:36:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>youtubeからflvを引っこ抜いてごにょごにょする方法</title>
		<link>http://www.planet-ape.net/blog/archives/890</link>
		<comments>http://www.planet-ape.net/blog/archives/890#comments</comments>
		<pubDate>Sat, 02 Apr 2011 16:10:14 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[東京てら子]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/blog/?p=890</guid>
		<description><![CDATA[東京てら子14に参加しました。 youtubeから動画ファイル(flv)を引っこ抜いてごにょごにょする方法を発表したのですが、スライドも作らず、酷い発表でしたorz これではいかん！とkeynote買ったので、次回の発表 [...]]]></description>
			<content:encoded><![CDATA[				<p>東京てら子14に参加しました。<br />
				youtubeから動画ファイル(flv)を引っこ抜いてごにょごにょする方法を発表したのですが、スライドも作らず、酷い発表でしたorz<br />
				これではいかん！とkeynote買ったので、次回の発表こそは！<br />
				以下、まとめです。<br />
				<span id="more-890"></span></p>
				<h3>youtubeの検索</h3>
				<p>まずはyoutubeからキーワードで検索したデータを取得したいと思います。<br />
				これにはjsonやrss形式のデータとして取得できるAPIがyoutubeから提供されています。<br />
				<a href="http://code.google.com/intl/ja/apis/youtube/developers_guide_protocol.html#Searching_for_Videos">デベロッパー ガイド: Data API プロトコル -</a></p>
				<p>書かれているとおりに検索パラメータを設定してgdata.youtube.comへリクエストします。<br />
				Flash(acfionscript3)で扱うにはjson形式の方が楽だと思いますが、かなり大量の(ネストの深い)データが送られてくるので解析が結構厄介です。<br />
				ex:<a href="http://gdata.youtube.com/feeds/api/videos?start-index=1&#038;max-results=50&#038;orderby=viewCount&#038;alt=json&#038;vq=AKB48">akb48というキーワードで検索した結果</a></p>
				<p>これの解析用にjsonビュアー(エディタ)があると便利です。<br />
				<a href="http://jsonviewer.stack.hu/">http://jsonviewer.stack.hu/</a></p>
				<p>取得したjsonデータからサムネイル一覧を表示するサンプルを作ってみました。<br />
				<script type="text/javascript" src="http://wonderfl.net/blogparts/axrB/js"></script>
				<p class="ttlBpWonderfl" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://wonderfl.net/c/axrB" title="youtube api">youtube api &#8211; wonderfl build flash online</a></p>
				<h3>動画ファイル(flv)の取得</h3>
				<p>上記のAPIから個々の動画のIDが取得できますが、youtubeから動画ファイル(flv)を取得するには別の<strong>（裏）API</strong>を使います。<br />
				<strong>http://www.youtube.com/get_video_info?video_id=ビデオID</strong></p>
				<p>ビデオIDは検索APIで取得した個々のyoutubeへのURLから抜き出しました。<br />
				これをリクエストするとデータのかたまり(URI風味)が返ってきます。</p>
				<pre>
fexp=904000&#038;shortform=True&#038;allow_embed=1&#038;ad_host_tier=1085614&#038;keywords=AKB48%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B7%E3%83%A3%E3%83%ABYT%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%2C%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%2CAKB48%2CAKB%2CPV%2C%E5%A4%A7%E5%B3%B6%E5%84%AA%E5%AD%90%2C%E5%89%8D%E7%94%B0%E6%95%A6%E5%AD%90%2C%E7%AF%A0%E7%94%B0%E9%BA%BB%E9%87%8C%E5%AD%90%2C%E6%9D%BF%E9%87%8E%E5%8F%8B%E7%BE%8E%2C%E6%B8%A1%E8%BE%BA%E9%BA%BB%E5%8F%8B%2C%E9%AB%98%E6%A9%8B%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E5%B6%8B%E9%99%BD%E8%8F%9C%2C%E6%9F%8F%E6%9C%A8%E7%94%B1%E7%B4%80%2C%E5%AE%AE%E6%BE%A4%E4%BD%90%E6%B1%9F%2C%E6%9D%BE%E4%BA%95%E7%8F%A0%E9%87%8C%E5%A5%88%2C%E6%9D%BE%E4%BA%95%E7%8E%B2%E5%A5%88%2C%E6%B2%B3%E8%A5%BF%E6%99%BA%E7%BE%8E%2C%E9%AB%98%E5%9F%8E%E4%BA%9C%E6%A8%B9%2C%E5%B3%AF%E5%B2%B8%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E9%87%8E%E6%81%B5%E4%BB%A4%E5%A5%88%2C%E5%8C%97%E5%8E%9F%E9%87%8C%E8%8B%B1%2C%E7%A7%8B%E5%85%83%E6%89%8D%E5%8A%A0%2C%E4%BD%90%E8%97%A4%E4%BA%9C%E7%BE%8E%E8%8F%9C%2C%E6%8C%87%E5%8E%9F%E8%8E%89%E4%B9%83%2C%E4%BB%B2%E5%B7%9D%E9%81%A5%E9%A6%99%2C%E5%AE%AE%E5%B4%8E%E7%BE%8E%E7%A9%82%2C%E3%83%81%E3%83%BC%E3%83%A0A%2C%E3%83%81%E3%83%BC%E3%83%A0K%2C%E3%83%81%E3%83%BC%E3%83%A0B%2CSKE48&#038;cafe_experiment_id=&#038;fmt_url_map=35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D57D90DF7001E8ED2DB059A6975490B405FE5FF2D.7D64AA17401DD3EBAF5B0A3E3D7AFF1299987607%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D164BB4EFB44A54B1FB3765B66F346F62CE3A3B19.559CA335DC8339D0D2BAB3D2E644F2FB54BB46BD%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D254D84294E4F8D68A269788C060E81F449CA5032.7632200AE7E393B6206FBE0C692B5BC0235D42C8%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DA1748203968C1599BE0714FE0078E193B4B7ACF5.0C12FCFCFC260F767B3E14F4AD3BEC254D989802%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347&#038;allow_ratings=1&#038;user_gender=m&#038;cust_gender=1&#038;track_embed=1&#038;host_language=ja&#038;cust_age=1003&#038;gut_tag=%2F4061%2Fytunknown%2Fmain&#038;fmt_list=35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0&#038;author=AKB48&#038;muted=0&#038;ast=site_content&#038;length_seconds=337&#038;user_age=35&#038;has_cc=False&#038;ad_channel_code_overlay=invideo_overlay_480x70_cat10%2Cafv_overlay%2Cytps_default%2Cytel_embedded%2Cyt_mpvid_AASfcYTynvKO-t3z%2Cyt_cid_395520%2Cytexp_904000&#038;ftoken=BMEhOBEQC8SQMoVNCVygJs5x08R8MTMwMTI5NjIxNw%3D%3D&#038;mpvid=AASfcYTynvKO-t3z&#038;sffb=True&#038;ad_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fad-vflAK0aS4.swf&#038;status=ok&#038;watermark=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl_bP6ud.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfloR6wva.swf&#038;timestamp=1301209817&#038;plid=AASfcYTyotzUMNNH&#038;ad_host=ca-host-pub-9560003102968193&#038;watch_ajax_token=OT2R7bUoNEmhvjheRGPVYvJBGb98MTMwMTI5NjIxNw%3D%3D&#038;fmt_map=35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0&#038;cid=395520&#038;hl=ja_JP&#038;ad_flags=0&#038;afv=True&#038;logwatch=1&#038;endscreen_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fendscreen-vfliijCMI.swf&#038;ad_eurl=http%3A%2F%2Fwww.youtube.com%2Fvideo%2FlkHlnWFnA0c&#038;fmt_stream_map=35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D57D90DF7001E8ED2DB059A6975490B405FE5FF2D.7D64AA17401DD3EBAF5B0A3E3D7AFF1299987607%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v2.cache6.c.youtube.com%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D164BB4EFB44A54B1FB3765B66F346F62CE3A3B19.559CA335DC8339D0D2BAB3D2E644F2FB54BB46BD%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v16.cache8.c.youtube.com%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D254D84294E4F8D68A269788C060E81F449CA5032.7632200AE7E393B6206FBE0C692B5BC0235D42C8%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v18.cache8.c.youtube.com%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DA1748203968C1599BE0714FE0078E193B4B7ACF5.0C12FCFCFC260F767B3E14F4AD3BEC254D989802%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v22.cache2.c.youtube.com&#038;pyv_in_related_cafe_experiment_id=&#038;avg_rating=4.09949757022&#038;leanback_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fleanback_module-vflcVMkEi.swf&#038;ad_logging_flag=1&#038;vq=auto&#038;targeting_video_doc_id=&#038;token=vjVQa1PpcFOPYn1MXZhSuHyseixrHJok0Hpycfs0B_E%3D&#038;thumbnail_url=http%3A%2F%2Fi1.ytimg.com%2Fvi%2FlkHlnWFnA0c%2Fdefault.jpg&#038;ad_video_pub_id=ca-pub-6219811747049371&#038;video_id=lkHlnWFnA0c&#038;title=%E3%80%90PV%E3%80%91+%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%2F+AKB48+%5B%E5%85%AC%E5%BC%8F%5D
</pre>
				<p>もう何だか分からないデータなので&#038;でsplitし、さらに=でsplitすると良い感じのobjectデータになります。</p>
				<pre>
ftoken:8Kzm9UBF0QVJJFrf3XIdwyYuDnl8MTMwMTgxNTk2Nw%3D%3D
vq:auto
mpvid:AASf6ohyqG2kkUl5
targeting_video_doc_id:
sffb:True
track_embed:1
status:ok
host_language:ja
ad_module:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fad-vflsLLPjn.swf
thumbnail_url:http%3A%2F%2Fi1.ytimg.com%2Fvi%2FlkHlnWFnA0c%2Fdefault.jpg
ad_video_pub_id:ca-pub-6219811747049371
watermark:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl_bP6ud.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfloR6wva.swf
video_id:lkHlnWFnA0c
fmt_list:35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0
token:vjVQa1PpcFOP8CA52yQIbIqCU7Ba3fO-MsgAFxBQbYk%3D
cust_age:1003
fmt_stream_map:35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v2.cache6.c.youtube.com%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D316FD89E6B91F8952E8DCA58D7E5D0C7F40BBF7E.A023A3DC790668C3FC1FC298E472B72D208DDF7E%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v16.cache8.c.youtube.com%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DB7744E4DC036A8401AC4807D087270E6495055FD.6101957B15997A7A287A20CCB66709E78C44F49D%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v18.cache8.c.youtube.com%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D8EBE70874078CB033EC2E64D2A2788F75C2449C7.07DFD00BD1F715CE3CF790271B4EA447C8AC3D33%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v22.cache2.c.youtube.com
allow_embed:1
plid:AASf6ohyquVulsGc
title:%E3%80%90PV%E3%80%91+%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%2F+AKB48+%5B%E5%85%AC%E5%BC%8F%5D
gut_tag:%2F4061%2Fytunknown%2Fmain
timestamp:1301729567
author:AKB48
watch_ajax_token:TT9_MyGaIHAGRcpaj4GNuom446R8MTMwMTgxNTk2Nw%3D%3D
ad_host:ca-host-pub-9560003102968193
fmt_map:35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0
ad_host_tier:1085614
keywords:AKB48%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B7%E3%83%A3%E3%83%ABYT%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%2C%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%2CAKB48%2CAKB%2CPV%2C%E5%A4%A7%E5%B3%B6%E5%84%AA%E5%AD%90%2C%E5%89%8D%E7%94%B0%E6%95%A6%E5%AD%90%2C%E7%AF%A0%E7%94%B0%E9%BA%BB%E9%87%8C%E5%AD%90%2C%E6%9D%BF%E9%87%8E%E5%8F%8B%E7%BE%8E%2C%E6%B8%A1%E8%BE%BA%E9%BA%BB%E5%8F%8B%2C%E9%AB%98%E6%A9%8B%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E5%B6%8B%E9%99%BD%E8%8F%9C%2C%E6%9F%8F%E6%9C%A8%E7%94%B1%E7%B4%80%2C%E5%AE%AE%E6%BE%A4%E4%BD%90%E6%B1%9F%2C%E6%9D%BE%E4%BA%95%E7%8F%A0%E9%87%8C%E5%A5%88%2C%E6%9D%BE%E4%BA%95%E7%8E%B2%E5%A5%88%2C%E6%B2%B3%E8%A5%BF%E6%99%BA%E7%BE%8E%2C%E9%AB%98%E5%9F%8E%E4%BA%9C%E6%A8%B9%2C%E5%B3%AF%E5%B2%B8%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E9%87%8E%E6%81%B5%E4%BB%A4%E5%A5%88%2C%E5%8C%97%E5%8E%9F%E9%87%8C%E8%8B%B1%2C%E7%A7%8B%E5%85%83%E6%89%8D%E5%8A%A0%2C%E4%BD%90%E8%97%A4%E4%BA%9C%E7%BE%8E%E8%8F%9C%2C%E6%8C%87%E5%8E%9F%E8%8E%89%E4%B9%83%2C%E4%BB%B2%E5%B7%9D%E9%81%A5%E9%A6%99%2C%E5%AE%AE%E5%B4%8E%E7%BE%8E%E7%A9%82%2C%E3%83%81%E3%83%BC%E3%83%A0A%2C%E3%83%81%E3%83%BC%E3%83%A0K%2C%E3%83%81%E3%83%BC%E3%83%A0B%2CSKE48
cid:395520
shortform:True
hl:ja_JP
ad_flags:0
afv:True
muted:0
endscreen_module:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fendscreen-vflYjC_7j.swf
ast:site_content
fexp:904000
ad_eurl:http%3A%2F%2Fwww.youtube.com%2Fvideo%2FlkHlnWFnA0c
length_seconds:337
fmt_url_map:35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D316FD89E6B91F8952E8DCA58D7E5D0C7F40BBF7E.A023A3DC790668C3FC1FC298E472B72D208DDF7E%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DB7744E4DC036A8401AC4807D087270E6495055FD.6101957B15997A7A287A20CCB66709E78C44F49D%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D8EBE70874078CB033EC2E64D2A2788F75C2449C7.07DFD00BD1F715CE3CF790271B4EA447C8AC3D33%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347
logwatch:1
cust_gender:1
user_age:35
pyv_in_related_cafe_experiment_id:
avg_rating:4.09653092006
ad_channel_code_overlay:invideo_overlay_480x70_cat10%2Cafv_overlay%2Cytps_default%2Cytel_embedded%2Cyt_mpvid_AASf6ohyqG2kkUl5%2Cyt_cid_395520%2Cytexp_904000
allow_ratings:1
user_gender:m
leanback_module:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fleanback_module-vflAPy5OS.swf
has_cc:False
ad_logging_flag:1
</pre>
				<p>この中のfmt_stream_mapにflvまでのurlが入っていますので、URLエンコードしたものを抜き出してみます。</p>
				<pre>
0:35|http://v2.lscache6.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=35&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v2.cache6.c.youtube.com
1:34|http://v16.lscache8.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=34&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=316FD89E6B91F8952E8DCA58D7E5D0C7F40BBF7E.A023A3DC790668C3FC1FC298E472B72D208DDF7E&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v16.cache8.c.youtube.com
2:18|http://v18.lscache8.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=18&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=B7744E4DC036A8401AC4807D087270E6495055FD.6101957B15997A7A287A20CCB66709E78C44F49D&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v18.cache8.c.youtube.com
3:5|http://v22.lscache2.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=5&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=8EBE70874078CB033EC2E64D2A2788F75C2449C7.07DFD00BD1F715CE3CF790271B4EA447C8AC3D33&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v22.cache2.c.youtube.com
</pre>
				<p><strong>,</strong>でsplitしてみると４つデータが取得出来ますが、まだurlとしては使えません。<br />
				更に|でsplitするとようやっとflvのURLが取得出来ます。</p>
				<pre>

http://v2.lscache6.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=35&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347
</pre>
				<p>ただこのflvはクロスドメイン許可されていませんので取得は出来ますが、Flash内で使用してもローカルでしか動かせませんorz<br />
				さらにyoutubeから提供されているAPIを使って専用のswfをロードすれば、Flash内で再生だけでなく、bitmap等も直接取得することができるようです。<br />
				というわけで、全く意味の無い発表だったのですが、flvを直接取得して色々とゴニョゴニョしたい人はこれで色々できますね笑</p>
				<p>当日に発表したコンテンツl※FDT／FBプロジェクト<br />
				<a href='http://www.planet-ape.net/wp-content/uploads/2011/04/youtubeapi.zip'>youtubeapi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/890/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>yahoo経由でamazonを検索する（rhacoネタ）</title>
		<link>http://www.planet-ape.net/blog/archives/602</link>
		<comments>http://www.planet-ape.net/blog/archives/602#comments</comments>
		<pubDate>Sat, 05 Jul 2008 14:12:40 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[rhaco]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Webサービス]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=602</guid>
		<description><![CDATA[Amahoo!2.0 yahoo経由でamazonを検索するものを作りました。 それどこのYasazon &#8211; ヤサゾン？という感じで、完全に劣化コピーです、はい笑 いちおうAutoPagerize対応してます [...]]]></description>
			<content:encoded><![CDATA[				<ul class="link">
				<li><a href="http://www.planet-ape.net/amahoo2/">Amahoo!2.0</a></li>
				</ul>
				<p>yahoo経由でamazonを検索するものを作りました。<br />
				それどこの<a href="http://yasazon.com/">Yasazon &#8211; ヤサゾン</a>？という感じで、完全に劣化コピーです、はい笑<br />
				いちおうAutoPagerize対応してますので、マウスくりくりで次ページのものがくっつきます。<br />
				それで<a href="http://developer.yahoo.co.jp/search/web/V1/webSearch.html">Yahoo!ウェブ検索API</a>をrhacoで使用するためのクラスがこちら。</p>
				<pre class="brush: php">
&lt;?php
Rhaco::import("network.http.ServiceRestAPIBase");

class yahooSearchApi extends ServiceRestAPIBase{
&#9;var $appid;
&#9;var $url;
&#9;var $type='all';
&#9;var $results=10;
&#9;var $start=1;
&#9;var $format='any';//any&#65288;&#12487;&#12501;&#12457;&#12523;&#12488;&#65289;, html, msword, pdf, ppt, rss, txt, xls
&#9;var $adult_ok='0';//&#20516;&#12394;&#12375;&#65288;&#12487;&#12501;&#12457;&#12523;&#12488;&#65289;, 1
&#9;var $similar_ok='0';//&#20516;&#12394;&#12375;&#65288;&#12487;&#12501;&#12457;&#12523;&#12488;&#65289;, 1
&#9;var $language='ja';//ja&#65288;&#12487;&#12501;&#12457;&#12523;&#12488;&#65289;
&#9;var $country='0';//&#20516;&#12394;&#12375;&#65288;&#12487;&#12501;&#12457;&#12523;&#12488;&#65289;
&#9;var $site='0';//&#20516;&#12394;&#12375;&#65288;&#12487;&#12501;&#12457;&#12523;&#12488;&#65289;
&#9;
&#9;/**
&#9; * &#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;
&#9; *
&#9; * @param unknown_type $key
&#9; * @return yahooSearchApi
&#9; */
&#9;function yahooSearchApi($key){
&#9;&#9;parent::ServiceRestAPIBase();
&#9;&#9;$this-&gt;url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch";
&#9;&#9;$this-&gt;appid = $key;
&#9;}
&#9;
&#9;function search($keyword){
&#9;&#9;
&#9;&#9;$hash = array(
&#9;&#9;"query"  =&gt; $keyword,
&#9;&#9;"type" =&gt; $this-&gt;type,
&#9;&#9;"results" =&gt; $this-&gt;results,
&#9;&#9;"start" =&gt; $this-&gt;start,
&#9;&#9;"format" =&gt; $this-&gt;format,
&#9;&#9;"adult_ok" =&gt; $this-&gt;adult_ok,
&#9;&#9;"similar_ok" =&gt; $this-&gt;similar_ok,
&#9;&#9;"language" =&gt; $this-&gt;language,
&#9;&#9;"country" =&gt; $this-&gt;country,
&#9;&#9;"site" =&gt; $this-&gt;site
&#9;&#9;);

&#9;&#9;$pTag = new SimpleTag();
&#9;&#9;$pTag-&gt;set($this-&gt;get($hash));
&#9;&#9;return $pTag-&gt;toHash();
&#9;}
&#9;
&#9;function buildUrl($hash){
&#9;&#9;return parent::buildUrl($hash,array("appid"=&gt;$this-&gt;appid));
&#9;}
&#9;
&#9;/**
&#9; * &#12450;&#12480;&#12523;&#12488;OK
&#9; *
&#9; * @param int $adult_ok
&#9; */
&#9;public function setAdult_ok($adult_ok) {
&#9;&#9;$this-&gt;adult_ok = $adult_ok;
&#9;}
&#9;/**
&#9; * &#12450;&#12480;&#12523;&#12488;OK
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getAdult_ok() {
&#9;&#9;return $this-&gt;adult_ok;
&#9;}
&#9;/**
&#9; * &#22269;&#21029;&#65288;&#26085;&#26412;jpn&#65289;
&#9; *
&#9; * @param unknown_type $country
&#9; */
&#9;public function setCountry($country) {
&#9;&#9;$this-&gt;country = $country;
&#9;}
&#9;/**
&#9; * &#22269;&#21029;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getCountry() {
&#9;&#9;return $this-&gt;country;
&#9;}
&#9;/**
&#9; * &#12501;&#12457;&#12540;&#12510;&#12483;&#12488;&#65288;html, msword, pdf, ppt, rss, txt, xls&#65289;
&#9; *
&#9; * @param unknown_type $format
&#9; */
&#9;public function setFormat($format) {
&#9;&#9;$this-&gt;format = $format;
&#9;}
&#9;/**
&#9; * &#12501;&#12457;&#12540;&#12510;&#12483;&#12488;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getFormat() {
&#9;&#9;return $this-&gt;format;
&#9;}
&#9;/**
&#9; * &#20351;&#29992;&#35328;&#35486;&#65288;ja)
&#9; *
&#9; * @param unknown_type $language
&#9; */
&#9;public function setLanguage($language) {
&#9;&#9;$this-&gt;language = $language;
&#9;}
&#9;/**
&#9; * &#20351;&#29992;&#35328;&#35486;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getLanguage() {
&#9;&#9;return $this-&gt;language;
&#9;}
&#9;/**
&#9; * &#20986;&#21147;&#20214;&#25968;
&#9; *
&#9; * @param unknown_type $results
&#9; */
&#9;public function setResults($results) {
&#9;&#9;$this-&gt;results = $results;
&#9;}
&#9;/**
&#9; * &#20986;&#21147;&#20214;&#25968;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getResults() {
&#9;&#9;return $this-&gt;results;
&#9;}
&#9;/**
&#9; * &#21516;&#12376;&#12467;&#12531;&#12486;&#12531;&#12484;&#12434;&#21029;&#12398;&#26908;&#32034;&#32080;&#26524;&#12392;&#12377;&#12427;&#12363;&#12393;&#12358;&#12363;
&#9; *
&#9; * @param unknown_type $similar_ok
&#9; */
&#9;public function setSimilar_ok($similar_ok) {
&#9;&#9;$this-&gt;similar_ok = $similar_ok;
&#9;}
&#9;/**
&#9; * &#21516;&#12376;&#12467;&#12531;&#12486;&#12531;&#12484;&#12434;&#21029;&#12398;&#26908;&#32034;&#32080;&#26524;&#12392;&#12377;&#12427;&#12363;&#12393;&#12358;&#12363;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getSimilar_ok() {
&#9;&#9;return $this-&gt;similar_ok;
&#9;}
&#9;/**
&#9; * &#26908;&#32034;&#23550;&#35937;&#12469;&#12452;&#12488;
&#9; *
&#9; * @param unknown_type $site
&#9; */
&#9;public function setSite($site) {
&#9;&#9;$this-&gt;site = $site;
&#9;}
&#9;/**
&#9; * &#26908;&#32034;&#23550;&#35937;&#12469;&#12452;&#12488;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getSite() {
&#9;&#9;return $this-&gt;site;
&#9;}
&#9;/**
&#9; * &#20309;&#12506;&#12540;&#12472;&#30446;&#12434;&#34920;&#31034;
&#9; *
&#9; * @param unknown_type $start
&#9; */
&#9;public function setStart($start) {
&#9;&#9;$this-&gt;start = $start;
&#9;}
&#9;/**
&#9; * &#20309;&#12506;&#12540;&#12472;&#30446;&#12434;&#34920;&#31034;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getStart() {
&#9;&#9;return $this-&gt;start;
&#9;}
&#9;/**
&#9; * &#26908;&#32034;&#12398;&#20181;&#26041;&#65288;all, any, phrase&#65289;
&#9; *
&#9; * @param unknown_type $type
&#9; */
&#9;public function setType($type) {
&#9;&#9;$this-&gt;type = $type;
&#9;}
&#9;/**
&#9; * &#26908;&#32034;&#12398;&#20181;&#26041;
&#9; *
&#9; * @return unknown
&#9; */
&#9;public function getType() {
&#9;&#9;return $this-&gt;type;
&#9;}

}

?&gt;
</pre>
				<p>パラメータが多くてsetter/getterを作るのがめんどいなあと思ったのですが、setter/getterをオートで入れてくれるeclipseプラグインを見つけてさくっと作ることが出来ました。</p>
				<ul class="link">
				<li><a href="http://blog.xole.net/article.php?id=642">ハタさんのブログ : S2Dao.PHP5 Eclipse Plugin for PDT できたよー＼(^o^)／</a></li>
				</ul>
				<p>setter/getterをオートで入れるっていうのは上記ツールの機能のほんの一部でしかないような気がしますが・・・。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/602/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

