<?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>PEAR &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/pear/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 18 Oct 2011 05:31:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>PEARのServices_Twitterで未定義のエンドポイントを利用する</title>
		<link>https://blog.mach3.jp/2011/10/18/add-endpoints-to-services_twitte.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 18 Oct 2011 05:31:42 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Services_Twitter]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2082</guid>

					<description><![CDATA[この記事の情報は古くなっています。 Twitter APIのバージョンも上がり、Services_Twitterは現在メンテナンスされていない様です。 「Services_Twitter」は、簡単にTwitterAPIを [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
    この記事の情報は古くなっています。<br />
    Twitter APIのバージョンも上がり、Services_Twitterは現在メンテナンスされていない様です。
</p>



<p>「<a href="http://pear.php.net/package/Services_Twitter">Services_Twitter</a>」は、簡単にTwitterAPIを利用する為のPEARパッケージです。<br />
今回の記事は、このパッケージでサポートされていないエンドポイントを使う方法の備忘録です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-gw3047B-bIA/Tp0OnuC4ktI/AAAAAAAABYA/5E_EXhAF310/s400/201110181428.png" alt="PEARのServices_Twitterで未定義のエンドポイントを利用する"/></figure>



<p></p>



<span id="more-2082"></span>



<h2 class="wp-block-heading">Services_Twitterで利用できない物</h2>



<p>例えば、<em>statuses/following_timeline</em>や、<em>statuses/media_timeline</em>等、<br />
公式のREST APIドキュメントに記載されていないものは、<br />
初期状態のServices_Twitterでは使用する事ができません。</p>



<ul class="wp-block-list">
<li><a href="https://dev.twitter.com/docs/api">REST API Resources | Twitter Developers</a></li>
</ul>



<p>※公式でアナウンスされていない物を使うわけですから、使用は勿論自己責任になります。</p>



<h2 class="wp-block-heading">Services_Twitterにエンドポイントを追加する方法</h2>



<p>Services_Twitterは、XMLで使用できるエンドポイントを管理していて、<br />
そこに定義されていない物を呼びだそうとすると例外を吐く作りになっています。</p>



<h3 class="wp-block-heading">api.xmlの所在</h3>



<p>エンドポイントの定義ファイルである「api.xml」は、<br />
PEARのインストールディレクトリ内の</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>data/Services_Twitter/data/api.xml</p>
</blockquote>



<p>に置いてあります。<br />
これに<endpoint>を追加してやれば、エンドポイントを使えるようになる仕組み。<br />
ただ、これを直接編集するのもちょっとアレだなぁと思い…</endpoint></p>



<h2 class="wp-block-heading">XMLを指定してエンドポイントを追加出来るように拡張してみる</h2>



<p>自前のxmlファイルのパスを引数に突っ込んで、<br />
未定義のエンドポイントを足せるようにServices_Twitterクラスを拡張してみます。</p>



<h3 class="wp-block-heading">書いてみた物</h3>



<ul class="wp-block-list">
<li><a href="https://gist.github.com/1292371">Servces_Twitterを拡張して定義ファイルを追加で読み込めるようにする。 — Gist</a></li>
</ul>



<pre class="wp-block-preformatted"><!--?php
require_once( "Services/Twitter.php" );

class MY_Services_twitter extends Services_twitter {

    public function __construct(){
        parent::__construct();
    }

    public function addAPI( $xml ){
        if( !file_exists( $xml ) ){
            throw new Exception( "'{$xml}' is not found." );
        }
        $xmlApi = simplexml_load_file( $xml );
        foreach ($xmlApi--->category as $category) {
            $catName = (string)$category['name'];
            if( !is_array( $this-&gt;api[$catName] ) ){
                $this-&gt;api[$catName] = array();
            }
            foreach ($category-&gt;endpoint as $endpoint) {
                $this-&gt;api[$catName][(string)$endpoint['name']] = $endpoint;
            }
        }
    }
}
</pre>



<p>うん、ものすごくたいした拡張ではないですね。<br />
使い方は、addAPIメソッドにXMLへのパスを突っ込むだけ。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>

$foo = <span class="hljs-keyword">new</span> MY_Services_twitter();
$foo-&gt;addAPI( <span class="hljs-string">"/the/path/to/your/api.xml"</span> );
</span></code></span></pre>


<h2 class="wp-block-heading">試しにエンドポイントを追加してみたXML</h2>



<p>試しにfollowing_timelinとmedias_timelineを追加する為のXMLを記述してみます。</p>



<p>仕様は未公開のうえ、パラメータの試験とかはやってないので、<br />
繰り返しますがご使用は自己責任で。<br />
以下の例のパラメータは、公式のWebサイトで使われている物を<br />
それっぽく適当に突っ込んでいます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">api</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">category</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"statuses"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">endpoint</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"following_timeline"</span> <span class="hljs-attr">method</span>=<span class="hljs-string">"GET"</span> <span class="hljs-attr">auth_required</span>=<span class="hljs-string">"false"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">formats</span>&gt;</span>xml,json,rss,atom<span class="hljs-tag">&lt;/<span class="hljs-name">formats</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"include_entities"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"boolean"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"include_available_feature"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"boolean"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"contributor_details"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"boolean"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"user_id"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"id_or_screenname"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"screen_name"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"id_or_screenname"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">endpoint</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">endpoint</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"media_timeline"</span> <span class="hljs-attr">method</span>=<span class="hljs-string">"GET"</span> <span class="hljs-attr">auth_required</span>=<span class="hljs-string">"false"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">formats</span>&gt;</span>xml,json,rss,atom<span class="hljs-tag">&lt;/<span class="hljs-name">formats</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"offset"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"integer"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"count"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"integer"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"score"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"boolean"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"filter"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"boolean"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"include_entities"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"boolean"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"user_id"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"id_or_screenname"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"screen_name"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"id_or_screenname"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"false"</span> /&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">endpoint</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">category</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">api</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">まとめ</h2>



<p>Services_Twitterではエンドポイントへのアクセスを__callで実装していて、<br />
目新しかったので参考になりました。<br />
今度機会があったら使ってみよう。オーバーロード。</p>



<ul class="wp-block-list">
<li><a href="http://php.net/manual/ja/language.oop5.overloading.php">PHP: オーバーロード &#8211; Manual</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PEARでTwitterのOAuthをしてみる備忘録</title>
		<link>https://blog.mach3.jp/2010/10/12/pear-twitter-oauth.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 12 Oct 2010 04:24:30 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=838</guid>

					<description><![CDATA[この記事の情報は古くなっています。PEARライブラリの替わりに、下記の記事のライブラリをお勧めします。 シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた OpauthとtmhOAuthで極めてお手軽 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
    この記事の情報は古くなっています。PEARライブラリの替わりに、下記の記事のライブラリをお勧めします。<br />
    <a href="/2012/10/hybridauth.html">シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた</a><br />
    <a href="/2012/08/opauth-and-tmhoauth-for-twitter.html">OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる</a>
</p>



<p>Twitterが最早ただのサービスとしてではなく「プラットフォーム」として広まる中で、<br />
これを活用したサービスの開発は我々の一つの課題となりつつあります。<br />
<a href="/2010/09/auth-anywhere.html">anywhereを利用した認証</a>は以前触れましたが、<br />
今回はPHPでOAuth認証をする方法をまとめてみます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TLMg82TUzRI/AAAAAAAABDk/z9lfF-fYn9s/201010112335.png" alt="PEARでTwitterのOAuthをしてみる備忘録"/></figure>



<p></p>



<span id="more-838"></span>



<h2 class="wp-block-heading">事前準備</h2>



<h3 class="wp-block-heading">アプリケーションの登録</h3>



<p>まずはTwitterでアプリケーションを登録しなければなりません。<br />
» <a href="http://dev.twitter.com/apps/new">New Twitter Application | dev.twitter.com</a><br />
※個人的にここのCaptchaはかなり手強かったです</p>



<p>必要事項を明記して登録すると、OAuthに必要な情報を出力してくれます。<br />
特に必要な項目は、次の三つ。きちんと控えておきます。</p>



<ul class="wp-block-list">
<li>Consumer key</li>



<li>Consumer secret</li>



<li>Registerd OAuth Callback URL<br /><br />（Twitter側で認証が完了した後で戻ってくる為のページURL）</li>
</ul>



<h3 class="wp-block-heading">PEARパッケージのインストール</h3>



<p>以下のパッケージが必要になりますので、インストールしておきます。</p>



<ul class="wp-block-list">
<li><a href="http://pear.php.net/package/Services_Twitter">Services_Twitter</a></li>



<li><a href="http://pear.php.net/package/HTTP_OAuth">HTTP_OAuth</a></li>
</ul>



<h2 class="wp-block-heading">STEP:0 認証の準備</h2>



<p>まず情報を整理して変数に突っ込んでおきましょう。<br />
また、PEARパッケージのロードとsession_startも忘れずに。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">session_start();

<span class="hljs-comment">// &#91;1] ライブラリのロード</span>
<span class="hljs-keyword">require_once</span>(<span class="hljs-string">"Services/Twitter.php"</span>);
<span class="hljs-keyword">require_once</span>(<span class="hljs-string">"HTTP/OAuth/Consumer.php"</span>);

<span class="hljs-comment">// &#91;2] URL情報</span>
$request_token_url = <span class="hljs-string">"http://api.twitter.com/oauth/request_token"</span>;
$access_token_url = <span class="hljs-string">"http://api.twitter.com/oauth/access_token"</span>;
$authorize_url = <span class="hljs-string">"http://api.twitter.com/oauth/authorize"</span>;

<span class="hljs-comment">// &#91;3] アプリケーションの情報</span>
$consumer_key = <span class="hljs-string">"&lt;貴方のConsumer Key&gt;"</span>;
$consumer_secret = <span class="hljs-string">"&lt;貴方のConsumer Secret&gt;"</span>;
$callback_url = <span class="hljs-string">"&lt;貴方のCallback URL&gt;"</span>;
</code></span></pre>


<p><a href="http://lh3.ggpht.com/_JJkNs5Ixl70/TLMg82TUzRI/AAAAAAAABDk/z9lfF-fYn9s/201010112335.png">2</a> URL情報は共通です。<br />
<a href="http://dev.twitter.com/apps/new">3</a> アプリケーションの情報は各々固有な物になるので、<br />
登録時にもらったキーと設定したURLを格納します。</p>



<h2 class="wp-block-heading">STEP1: 「リクエストトークン」を取得</h2>



<p>まずはじめにHTTP_OAuthを介して「リクエストトークン」を頂き、<br />
Twitterの認証用のURLを取得します。<br />
そして必要とあらば、リダイレクトさせてあげます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// &#91;1] インスタンス生成</span>
$consumer = <span class="hljs-keyword">new</span> HTTP_OAuth_Consumer( $consumer_key, $consumer_secret );

<span class="hljs-comment">// &#91;2] getRequestTokenでリクエストトークンを取得</span>
$consumer-&gt;getRequestToken( $request_token_url, $callback_url );

<span class="hljs-comment">// &#91;3] getToken/getTokenSecretで、トークンをセッションに保存</span>
$_SESSION&#91;<span class="hljs-string">"request_token"</span>] = $consumer-&gt;getToken();
$_SESSION&#91;<span class="hljs-string">"request_token_secret"</span>] = $consumer-&gt;getTokenSecret();

<span class="hljs-comment">// &#91;4] getAuthorizeUrlでURLを取得</span>
$auth_url = $consumer-&gt;getAuthorizeUrl( $authorize_url );

<span class="hljs-comment">// &#91;5] 必要とあらばリダイレクト</span>
header( <span class="hljs-string">"Location: "</span> . $auth_url );
</code></span></pre>


<h2 class="wp-block-heading">STEP:2 Twitter側でアプリケーションの使用を「許可」する</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TLCAQlvV6pI/AAAAAAAABDc/mauHDb_ElPY/201010092345.png" alt="アプリケーションの使用を許可"/></figure>



<p></p>



<p>認証用のURLに飛ばすとユーザにはこんなページが表示されます。<br />
「許可する」をクリックすると、アプリケーション登録時に設定した「Callback URL」に、<br />
パラメータにトークンを携えて戻ってきてくれます。</p>



<p>こんな感じに。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/<em>?oauth_token=&lt;トークン&gt;&amp;oauth_verifier=&lt;トークン&gt;</em></p>
</blockquote>



<h2 class="wp-block-heading">STEP:3 「アクセストークン」を取得する</h2>



<p>今度は、STEP2で飛ばされた先の「Callback URL」での処理となります。<br />
ユーザがパラメータに携えてきたトークンを元に、「アクセストークン」を取得します。<br />
STEP1とは別スクリプトになるケースも多いと思いますが、（その前提で書いています）<br />
STEP:0での変数が必要になるので忘れずにロード/格納しておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// &#91;1] インスタンスの生成</span>
$consumer = <span class="hljs-keyword">new</span> HTTP_OAuth_Consumer( $consumer_key, $consumer_secret );

<span class="hljs-comment">// &#91;2] セッションに保存しておいたリクエストトークンを$consumerにセットする</span>
$consumer-&gt;setToken( $_SESSION&#91;<span class="hljs-string">"request_token"</span>] );
$consumer-&gt;setTokenSecret( $_SESSION&#91;<span class="hljs-string">"request_token_secret"</span>] );

<span class="hljs-comment">// &#91;3] getAccessTokenでアクセストークンを取得</span>
$consumer-&gt;getAccessToken( $access_token_url, $_GET&#91;<span class="hljs-string">"verifier"</span>] );

<span class="hljs-comment">// &#91;4] セッションにアクセストークンを保存</span>
$_SESSION&#91;<span class="hljs-string">"access_token"</span>] = $consumer-&gt;getToken();
$_SESSION&#91;<span class="hljs-string">"access_token_secret"</span>] = $consumer-&gt;getTokenSecret();
</code></span></pre>


<p>パラメータで渡されたトークンは、<a href="http://dev.twitter.com/apps/new">3</a>の第二引数で使用されます。<br />
<a href="http://pear.php.net/package/Services_Twitter">4</a>で生成されたアクセストークンが最終的なトークンとなります。（お疲れ様でした！）</p>



<h2 class="wp-block-heading">STEP:4 貰った「アクセストークン」でAPIにアクセス</h2>



<p>いよいよアクセストークンを元に、TwitterAPIにアクセスします。<br />
今まで通りにHTTP_OAuth_Consumerクラスを用いるのですが、<br />
コンストラクタの第3/第4引数にアクセストークンを渡す点に注意です。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// &#91;1] コンシューマインスタンスを生成</span>
$consumer = <span class="hljs-keyword">new</span> HTTP_OAuth_Consumer(
    $consumer_key,
    $consumer_secret,
    $_SESSION&#91;<span class="hljs-string">"access_token"</span>],
    $_SESSION&#91;<span class="hljs-string">"access_token_secret"</span>]
);
<span class="hljs-comment">// &#91;2] Twitterインスタンスを生成し、コンシューマを渡す</span>
$twitter = <span class="hljs-keyword">new</span> Services_Twitter;
$twitter-&gt;setOAuth($consumer);
</code></span></pre>


<p>これで$twitterにTwitterAPIを使う能力が備わったはずです。（なんかかっこいい）<br />
試しにその能力を奮ってみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// ユーザのホームタイムラインを出力してみる</span>
$timeline = $twitter-&gt;statuses-&gt;home_timeline();
<span class="hljs-keyword">foreach</span>($tl <span class="hljs-keyword">as</span> $t){
    <span class="hljs-keyword">echo</span> $t-&gt;text;
    <span class="hljs-keyword">echo</span> <span class="hljs-string">"&lt;br /&gt;"</span>;
}
</code></span></pre>


<p>連々とツイートが表示されたら成功です。<br />
実際に$twitterにどのような力が備わるのかについては、<br />
公式のTwitterAPIドキュメントをご参照ください。<br />
cf) <a href="http://apiwiki.twitter.com/w/page/Twitter-API-Documentation">Twitter API Wiki / Twitter API Documentation</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>とにかくトークンがいっぱい飛び交うので気がとーくんなります。<br />
今後使う機会も多くなって来ると思うので、覚えておかねば…。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2010/10/25</dt>
<dd>URLをhttpsからhttpに変更。SSLを使う場合は別途設定が必要になります。<br />
<a href="http://www.msng.info/archives/2010/01/twitter_api_oauth_with_php.php">PHPでTwitter APIのOAuthを使う方法まとめ &#8211; 頭ん中</a></dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
