<?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>Twitter &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/twitter/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Fri, 07 Sep 2012 00:30: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>一括メンションを簡単にするジェネレータ「MultiMentions」</title>
		<link>https://blog.mach3.jp/2012/09/07/multimentions.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 07 Sep 2012 00:30:42 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Anywhere]]></category>
		<category><![CDATA[Codogue]]></category>
		<category><![CDATA[Generator]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2655</guid>

					<description><![CDATA[先日ひっそりとCodogueに加わった新しい仲間「MultiMentions」の紹介です。 これはなに MultiMentions : 一括メンションジェネレーター &#124; CoDogue 多数のアカウントに対して一斉にメン [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日ひっそりと<a href="http://codogue.com">Codogue</a>に加わった新しい仲間「MultiMentions」の紹介です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-1SfqVYNWCBo/UEjNdx8kmHI/AAAAAAAABlI/0EaGrk_IBvw/s500/20120906-00.png" alt="一括メンションツイートを簡単にするジェネレータ「MultiMentions」"/></figure>



<p></p>



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



<h2 class="wp-block-heading">これはなに</h2>



<p><a href="http://codogue.com/multimentions/">MultiMentions : 一括メンションジェネレーター | CoDogue</a></p>



<p>多数のアカウントに対して一斉にメンションを送る為のジェネレータです。</p>



<p>2,3ユーザーならば何の問題もないのですが、<br />
数十人〜に一括して送るのはツイッターの文字数制限をクリアする為に<br />
一々小分けにしなくてはならず、骨が折れますね。</p>



<p>MultiMentionsはそんな分割作業をお手伝いしてくれるツールです。</p>



<h2 class="wp-block-heading">使用例</h2>



<p>例えば大規模なパーティの幹事をしていて、参加者に一斉に確認事項を送りたいけど、<br />
全員相互にフォローしているわけではないので、Twiplaの一括DMが送れない。捗らなくて辛い。</p>



<p>そんな時は</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-mgH3GxmhWgI/UEjNeNeg8HI/AAAAAAAABlI/NIwwgtu9TKk/s500/20120906-01.png" alt="Twipla のコメントで宛先を『「参加者」全員』にしてコピ"/></figure>



<p></p>



<p>Twipla のコメントで宛先を『「参加者」全員』にしてコピーして</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-hOOOcDAQNIg/UEjNd9qH0VI/AAAAAAAABlI/Rxjync8-c58/s500/20120906-02.png" alt="ユーザーリストをペースト/メッセージを入力"/></figure>



<p></p>



<p>MultiMentionsの<em>「ユーザーリスト」</em>に貼り付けます。</p>



<p><em>「メッセージ」</em>に送りたいメッセージを入力して、<em>「メッセージの生成」</em>ボタンをクリックします。<br />
ここではまだメッセージは送信されないので安心してクリックしてください。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-u_sXQltv70Q/UEjNernVFFI/AAAAAAAABlI/W6gHbFNOnS4/s500/20120906-03.png" alt="生成されたメッセージ"/></figure>



<p></p>



<p>すると下に連々と分割されたメッセージが出てきます。</p>



<p>これをコピーしてTwitterで投稿するも良し、<br />
各メッセージについている「Tweet」ボタンをクリックしても投稿する事が出来ます。<br />
「Tweet」ボタンで投稿完了すると、そのメッセージは消えます。</p>



<h2 class="wp-block-heading">注意事項など</h2>



<ul class="wp-block-list">
<li><br /><p>分かりやすいTwiplaを例に出してますが、ユーザーリストがその形式でなければいけないなんて事はありません。<br /><br />何らかの文字で区切ってあるTwitterアカウントの羅列であれば、動くはずです。</p><br /></li>



<li><br /><p>URLを短縮してから入力すると、ツイート時に文字制限オーバーのエラーが出る事があります。<br /><br />（サードパーティの短縮サービスより、公式の t.co の方が文字数が多い場合があるせいではないかと思っています）</p><br /></li>



<li><br /><p>「以下のユーザーは文字数の関係で入りませんでした。」というメッセージが表示される事があります。<br /><br />これは、メッセージと足すだけで文字数制限を超えてしまうユーザーです。メッセージを短くする等の工夫が必要です。</p><br /></li>



<li><br /><p>「Tweet」ボタンは初回だけ認証画面が表示されます。<br /><br />二つ目以降のメッセージでは表示されずにそのままツイートされるのでご注意ください。</p><br /></li>
</ul>



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



<p>たまたま大規模なパーティに関わる機会があったので、作ってみました。<br />
幹事さんの手助けになれば、幸いです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる</title>
		<link>https://blog.mach3.jp/2012/08/24/opauth-and-tmhoauth-for-twitter.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 24 Aug 2012 01:00:50 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2630</guid>

					<description><![CDATA[PHPでTwitterのAPIを利用する方法は何度かPEARのServices_Twitterと絡めて記事にした事がありましたが、 今回はもっと手軽に導入できるOpauthとtmhOAuthを紹介してみます。 認証はOp [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPでTwitterのAPIを利用する方法は何度かPEARのServices_Twitterと絡めて記事にした事がありましたが、 今回はもっと手軽に導入できる<em>Opauth</em>と<em>tmhOAuth</em>を紹介してみます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-fxH1YjDGGCc/UDaJLTvOyOI/AAAAAAAABkY/TJ0YFczT3JE/s400/20120824-00.png" alt="OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる"/></figure>



<p></p>



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



<h2 class="wp-block-heading">認証はOpauthで</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-wQYHOHBi93w/UDaJLT0qhxI/AAAAAAAABkY/ll1D5qbd53o/s500/20120824-01.png" alt="Opauth – Multi-provider authentication framework for PHP"/></figure>



<p></p>



<ul class="wp-block-list">
<li><a href="http://opauth.org/">Opauth – Multi-provider authentication framework for PHP</a></li>
</ul>



<p>Opauthは、様々なOAuth認証を一手に引き受けてくれる認証フレームワークです。</p>



<p>執筆時に公式に紹介されていた利用可能なサービスは、Twitter・Facebookなどを含め11件。 これらのサービスへの認証機能は<em>「ストラテジー」</em>という形で外部モジュールとして提供されます。 所謂ストラテジーパターンと呼ばれる物ですね。</p>



<p>その使い方は、認証のみにフォーカスしているライブラリなだけあって恐ろしくシンプルで簡単。 早速試してみます。</p>



<h3 class="wp-block-heading">インストール</h3>



<p>公式のダウンロードページからダウンロードするか、 Githubにリポジトリが公開されているのでそこからcloneします。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/uzyn/opauth">ダウンロードページ</a></li>



<li><a href="https://github.com/uzyn/opauth">GitHubリポジトリ</a></li>
</ul>



<p>公式の<em>「Opauth bundled with examples」</em>からなら、Twitter、Google、Facebookのストラテジーも同梱されているので 最初に試す際にはこれがおすすめです。 （それ以外ではストラテジーが空っぽの状態なので、別途ダウンロードしてくる必要があります）</p>



<h3 class="wp-block-heading">設定</h3>



<p>ダウンロードして解凍・設置したら、設定ファイルを用意します。 <em>opauth.config.php</em> などとしておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$opauth_config = <span class="hljs-keyword">array</span>(
    <span class="hljs-comment">/**
     * アプリケーションへのパス
     */</span>
    <span class="hljs-string">"path"</span> =&gt; <span class="hljs-string">"/the/path/to/"</span>,

    <span class="hljs-comment">/**
     * Twitterで認証した後に戻るコールバックURL。
     * {path} は前述のpathを展開してくれる。
     */</span>
    <span class="hljs-string">"callback_url"</span> =&gt; <span class="hljs-string">"{path}callback.php"</span>,

    <span class="hljs-comment">/**
     * ハッシュの生成に使われる文字列。任意の文字列を入れておく。
     */</span>
    <span class="hljs-string">"security_salt"</span> =&gt; md5(<span class="hljs-string">"foobar"</span>),

    <span class="hljs-comment">/**
     * ここからがストラテジーの設定
     */</span>
    <span class="hljs-string">"Strategy"</span> =&gt; <span class="hljs-keyword">array</span>(
        <span class="hljs-comment">/**
          * Twitterストラテジーの設定
          * key, secret はTwitterの公式から取得。
          */</span>
        <span class="hljs-string">"Twitter"</span> =&gt; <span class="hljs-keyword">array</span>(
            <span class="hljs-string">"key"</span> =&gt; <span class="hljs-string">"&#91;consumer_key]"</span>,
            <span class="hljs-string">"secret"</span> =&gt; <span class="hljs-string">"&#91;consumer_secret]"</span>
        )
    )
);
</code></span></pre>


<p><em>consumer_key</em> と <em>consumer_secret</em> は、 事前にTwitterでアプリケーションを登録して、自前の物を取得しておきましょう。</p>



<ul class="wp-block-list">
<li><a href="https://dev.twitter.com/apps/new">Create an application | Twitter Developers</a></li>
</ul>



<h3 class="wp-block-heading">試してみる</h3>



<h4 class="wp-block-heading">Twitterの認証画面へリダイレクト</h4>



<p>まず、Twitterの認証画面へリダイレクトするスクリプトを書きます。 ユーザはログイン時はこのページにアクセスする事になります。</p>


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

<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/Opauth.php"</span>;
<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/opauth.config.php"</span>;

<span class="hljs-keyword">new</span> Opauth($opauth_config);
</span></code></span></pre>


<p>ライブラリと設定を読み込んでインスタンスを初期化するだけです。<br />
認証画面のURLの取得やらリクエストトークンの取得やらリダイレクト処理やら、<br />
面倒な部分は全て代行してくれます。素晴らしい。</p>



<h4 class="wp-block-heading">アクセストークンを取得</h4>



<p>今度は、Twitterの認証画面から返ってきたユーザの<em>アクセストークン</em>を取得します。</p>



<p>デフォルトの設定では、認証情報は全て$_SESSIONに入るので<br />
事前に*session_start()* しておきましょう。</p>


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

session_start();

<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/Opauth.php"</span>;
<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/opauth.config.php"</span>;


<span class="hljs-comment">/**
 * コールバック時には第二引数にfalseを入れて初期化する。
 */</span>
$opauth = <span class="hljs-keyword">new</span> Opauth($opauth_config, <span class="hljs-keyword">false</span>);

<span class="hljs-comment">/**
 * 認証情報を取得します。
 */</span>
<span class="hljs-keyword">if</span>(<span class="hljs-keyword">isset</span>($_SESSION&#91;<span class="hljs-string">"opauth"</span>]) &amp;&amp; <span class="hljs-keyword">isset</span>($_SESSION&#91;<span class="hljs-string">"credentials"</span>])){

    $uid = $_SESSION&#91;<span class="hljs-string">"opauth"</span>]&#91;<span class="hljs-string">"auth"</span>]&#91;<span class="hljs-string">"id_str"</span>]; <span class="hljs-comment">// Twitterの数字のID</span>
    $access_token = $_SESSION&#91;<span class="hljs-string">"credentials"</span>]&#91;<span class="hljs-string">"token"</span>]; <span class="hljs-comment">// アクセストークン</span>
    $access_token_secret = $_SESSION&#91;<span class="hljs-string">"credentials"</span>]&#91;<span class="hljs-string">"secret"</span>]; <span class="hljs-comment">// 秘密のアクセストークン</span>

}
</span></code></span></pre>


<p>コールバック時も、インスタンスを初期化してセッションから情報を取得するだけです。</p>



<p>ここで取得したアクセストークンを使ってTwitterAPIにアクセスするわけですが、<br />
Opauthは認証を代行するライブラリなので、その為の機能は備えていません。<br />
ここから先は、他のライブラリに代行してもらうことにします。</p>



<h2 class="wp-block-heading">APIの利用はtmhOAuthで</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-9PACCvvHn44/UDaJLflWeKI/AAAAAAAABkY/h47QCYyBv3w/s500/20120824-02.png" alt="themattharris/tmhOAuth"/></figure>



<p></p>



<ul class="wp-block-list">
<li><br />    <a href="https://github.com/themattharris/tmhOAuth">themattharris/tmhOAuth</a><br />  </li>
</ul>



<p>
  <em>tmhOAuth</em>は、PEARのServices_TwitterのようにTwitterAPIへのアクセスを代行してくれるライブラリです。<br />
  勿論認証機能も備えていますが、あまりにもOpauthが楽すぎたので作業分担をしてもらいます。
</p>



<p>
  その特徴としては、（ほぼ）単ファイルで構成されていること。<br />
  <em>tmhOAuth.php</em>をとってきて読み込むだけでその機能を利用する事ができるので、導入が容易いですね。<br />
  （正確には、tmhUtilities.php というユーティリティ用のファイルが同梱されていますが、<br />
  依存しているわけではありません）
</p>



<h3 class="wp-block-heading">
  試してみる<br />
</h3>



<p>
  基本的には、前項で取得した4つのトークンを引数にして初期化して、<br />
  あとはTwitterAPIへのリクエストを行うだけです。
</p>


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

<span class="hljs-keyword">require</span> <span class="hljs-string">"/the/path/to/tmhOAuth.php"</span>;

<span class="hljs-comment">/**
 * tmhOAuthを初期化。
 * コンストラクタの引数はトークンをまとめた連想配列。
 */</span>
$twitter = <span class="hljs-keyword">new</span> tmhOAuth(
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"consumer_key"</span> =&gt; <span class="hljs-string">"&#91;consumer_key_for_your_application]"</span>,
        <span class="hljs-string">"consumer_secret"</span> =&gt; <span class="hljs-string">"&#91;consumer_secret_for_your_application]"</span>,
        <span class="hljs-string">"user_token"</span> =&gt; <span class="hljs-string">"&#91;access_token_of_the_user]"</span>,
        <span class="hljs-string">"user_secret"</span> =&gt; <span class="hljs-string">"&#91;access_token_secret_of_the_user]"</span>
    )
);

<span class="hljs-comment">/**
 * requestメソッドでTwitterAPIにリクエストを送る。
 * ここではユーザーのホームタイムラインを取得してみる。
 */</span>
$status = $twitter-&gt;request(
    <span class="hljs-string">"GET"</span>, <span class="hljs-comment">// リクエストメソッド</span>
    $twitter-&gt;url(<span class="hljs-string">"1/statuses/home_timeline"</span>), <span class="hljs-comment">// エンドポイントを指定</span>
    <span class="hljs-keyword">array</span>( <span class="hljs-string">"count"</span> =&gt; <span class="hljs-number">8</span> ) <span class="hljs-comment">// パラメータ</span>
);

<span class="hljs-comment">/**
 * requestの返り値はHTTPのステータスコード
 */</span>
<span class="hljs-keyword">if</span>($status == <span class="hljs-number">200</span>){
    <span class="hljs-comment">/**
     * データはメンバのresponseの中に、
     * さらに生のデータはその中の"response"の中にJSONで格納されている。
     */</span>
    $response = $twitter-&gt;response;
    $data = json_decode($response&#91;<span class="hljs-string">"response"</span>]);
    var_dump($data); <span class="hljs-comment">// あとは煮たり焼いたりする</span>
}
</span></code></span></pre>


<p>
  無事タイムラインを取得出来ましたでしょうか。<br />
  requestの返り値に注意しましょう。
</p>



<p>
  こちらのライブラリもまた、かなりシンプルな使い勝手になっていますね。
</p>



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



<p>
  PEARのServices_Twitterには、個人的にいくつかの不安がありました。
</p>



<ul class="wp-block-list">
<li><br />    ながらくβ版のままで、あまりメンテナンスされていない<br />  </li>



<li><br />    ローカルコピーでプロジェクトに同梱しづらい<br />  </li>
</ul>



<p>
  そこで他の選択肢を探していましたところ、<br />
  これらの2つのライブラリが候補として挙がって来ました。
</p>



<p>
  お手軽さも上々なので、今後是非試していきたいリソースです。
</p>
]]></content:encoded>
					
		
		
			</item>
		<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>Anywhereのクラスを使ってユーザをフォローさせてみる</title>
		<link>https://blog.mach3.jp/2011/06/16/follow-user-with-anywhere.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 16 Jun 2011 02:46:02 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Anywhere]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1856</guid>

					<description><![CDATA[Twitterの@anywhereは既に提供を終了していますので、本記事の内容も利用出来ません。 Sunsetting @Anywhere &#124; Twitter Developers 先日、Twitter公式から「フォロー [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
  Twitterの@anywhereは既に提供を終了していますので、本記事の内容も利用出来ません。<br /> <a href="https://dev.twitter.com/blog/sunsetting-anywhere">Sunsetting @Anywhere | Twitter Developers</a>
</p>



<p>先日、Twitter公式から「<a href="http://twitter.com/about/resources/followbutton">フォローボタン</a>」がリリースされましたね。<br />
とても便利そうなのですが、今日はそのボタンのお話ではなく、<br />
<a href="http://dev.twitter.com/anywhere">@anywhere</a>を使ってユーザをフォローさせるスクリプトのお話です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-vJVWN8ZLy2s/TfloJNz0uUI/AAAAAAAABSs/-45ltvs2EWs/201106161116.png" alt="User.follow"/></figure>



<p></p>



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



<h2 class="wp-block-heading">currentUser.follow()について</h2>



<p>AnywhereのTwitterオブジェクトに生えているcurrentUserにfollowメソッドがあるのですが、<br />
これは、「このユーザーで誰かをフォローする」ためのメソッドではなく、<br />
「このユーザーをフォローする」ためのメソッドです。<br />
つまり、</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    <span class="hljs-keyword">if</span>( tw.isConnected() ){
        tw.currentUser.follow();
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-comment">// ログインボタン表示</span>
    }
});
</code></span></pre>


<p>こんなふうにしても自分で自分をフォローしようとしてるだけで何も起きません。<br />
引数とか渡してみても変わらず。<br />
じゃぁどうするの。</p>



<h2 class="wp-block-heading">currentUserのidをすり替える例</h2>



<p>が、こちらに掲載されていました。<br />
<a href="http://www.polidog.jp/2010/07/17/anywhere%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%95%E3%82%A9%E3%83%AD%E3%83%BC%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%82%8A/">@Anywhereを使ってフォローしてみたり | polidog lab++</a></p>



<p>要するに、idを参照してフォローの処理を行っているなら、<br />
フォローの時だけidを差し替えて別人になってもらえば良いと。<br />
なるほど参考になりました。</p>



<h2 class="wp-block-heading">別のインスタンスを作る例</h2>



<p>上の記事を読んでから気付いたのですが、<br />
currentUserと同じクラスのインスタンスを作った方が理にかなっているのではないかと。<br />
探してみたら、TwitterオブジェクトにUserというクラスが生えていました。</p>



<h3 class="wp-block-heading">Userクラスの使い方</h3>



<p>オブジェクトでオプションを渡してnewしてやればもう使えます。<br />
そしてfollow()すれば、今サインインしてるユーザ(currentUser)から<br />
目的のユーザ（myUser）をフォローさせられるわけですね。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    <span class="hljs-keyword">if</span>( tw.isConnected() ){
        <span class="hljs-keyword">var</span> myUser = <span class="hljs-keyword">new</span> tw.User({ <span class="hljs-string">"id"</span> : <span class="hljs-string">"XXXXXXXX"</span> }); <span class="hljs-comment">// IDを入れてね！</span>
        <span class="hljs-comment">// ↓これでid:XXXXXXXXのユーザをフォロー出来ます</span>
        myUser.follow(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">success</span>)</span>{
            <span class="hljs-keyword">if</span>( success ){ alert(<span class="hljs-string">"フォローしたよ！"</span>); }
            <span class="hljs-keyword">else</span> { alert(<span class="hljs-string">"なんか失敗したよ！"</span>); }
        });
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-comment">// ログインボタン表示</span>
    }
});
</code></span></pre>


<p>follow()の引数に渡せるコールバック関数には、<br />
フォローが成功したか否かのboolが引数として渡されます。</p>



<h2 class="wp-block-heading">既にフォローされているかを確認してからフォローさせる</h2>



<p>既にフォローされている場合はfollow()する必要がないので、<br />
currentUser.isFollowing()で条件分岐をしてみます。</p>



<p>第一引数にフォロー済みかどうかを調べたいID、<br />
第二引数に結果を受け取る為のコールバック関数を渡して使います。<br />
コールバック関数にはフォロー済みか否か真偽値で渡されます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    <span class="hljs-keyword">var</span> id_str, callback;
    id_str = <span class="hljs-string">"XXXXXXXX"</span>, <span class="hljs-comment">//フォローさせたいID</span>
    callback = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">f</span>)</span>{
        <span class="hljs-keyword">if</span>( f ){ alert(<span class="hljs-string">"フォロー済みだよ！"</span>); }
        <span class="hljs-keyword">else</span> { alert( <span class="hljs-string">"まだフォローしてないよ！"</span>); }
    };
    tw.currentUser.isFollowing( id_str, callback );
});
</code></span></pre>


<h2 class="wp-block-heading">もろもろまとめてみた例</h2>



<p>サインインの条件分岐も併せてまとめてみる。</p>



<p><strong>HTML</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"follow-me-button"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"フォローしてね！"</span> /&gt;</span>
</code></span></pre>


<p><strong>JavaScript</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    <span class="hljs-keyword">var</span> id_str, followMe;
    id_str = <span class="hljs-string">"XXXXXXXXX"</span>;
    followMe = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">if</span>( !tw.isConnected() ){
            <span class="hljs-comment">// サインインしてなければしてもらおう</span>
            tw.bind( <span class="hljs-string">"authComplete"</span>, followMe );
            tw.signIn();
            <span class="hljs-keyword">return</span>;
        }
        tw.currentUser.isFollowing( id_str, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> f </span>)</span>{
            <span class="hljs-keyword">if</span>( f ){
                alert( <span class="hljs-string">"もう既にフォローしています"</span> );
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">if</span>( confirm( <span class="hljs-string">"本当にフォローしちゃっていいですか？"</span> ) ){
                    ( <span class="hljs-keyword">new</span> tw.User({ <span class="hljs-attr">id</span>:id_str }) ).follow(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                        alert( <span class="hljs-string">"フォローしました"</span> );
                    });
                }
            }
        });
    };
    $(<span class="hljs-string">"#follow-me-button"</span>).click( followMe );
});
</code></span></pre>


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



<p>単純にフォローさせるだけなら公式のボタンで事足りますが、<br />
例えばキャンペーンサイト等でツイートさせるついでにフォローしてもらう、<br />
みたいな処理をしたい場合に使える機能ですね。</p>



<p>ここらへんの情報がドキュメントになって公開されていれば幸せになれるのですが、<br />
私が探した限りでは公式の物は見つかりませんでした。探し方が悪いのかな…？</p>



<p>もしご存知の方いらっしゃいましたら優しく教えてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>新Twitterに非公式RTを追加するChrome/Firefox拡張</title>
		<link>https://blog.mach3.jp/2011/01/04/unofficial-retweet-by-extension.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 04 Jan 2011 08:05:06 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1354</guid>

					<description><![CDATA[個人的にはすっかりTwitterの新しい画面に慣れきってしまいまして、 最近では別途クライアントを使用せずにブラウザ上でTwitterしてます。 そこで気になるのは、いわゆる非公式RTと呼ばれるアレです。 非公式RTにつ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>個人的にはすっかりTwitterの新しい画面に慣れきってしまいまして、<br />
最近では別途クライアントを使用せずにブラウザ上でTwitterしてます。<br />
そこで気になるのは、いわゆる非公式RTと呼ばれるアレです。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TSLSpuqqkuI/AAAAAAAABIs/7LfCYNtRSZw/201101041655.png" alt="新Twitterに非公式RTを追加するChrome/Firefox拡張"/></figure>



<p></p>



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



<p>非公式RTについては趣向主義色々あれど、<br />
身内でじゃれあう時には欲しくなっちゃいますね。<br />
そんなわけで、非公式RTボタンを追加するブラウザ拡張を2点ここに。</p>



<h2 class="wp-block-heading">Chrome</h2>



<p><a href="https://chrome.google.com/extensions/detail/mejfljhfeahhhicjefeehikaooffggmf">Classic Retweet &#8211; Google Chrome 拡張機能ギャラリー</a></p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TSLRYkjMNaI/AAAAAAAABIg/nU2tAwKBZ0E/201101041637.png" alt="Classic Retweet"/></figure>



<p></p>



<p>導入すると、Twitterの各ツイートの「リツイート」ボタンの右に<br />
「ClassicRetweet」というのが出現するので、これをリプライ同様に使います。<br />
自分のツイートにはつかないみたいです。（上の画像は合成です！）</p>



<h2 class="wp-block-heading">Firefox</h2>



<p>Firefoxの場合はユーザースクリプトでの導入になりますので、<br />
事前に<a href="https://addons.mozilla.org/ja/firefox/addon/748/">Greasmonky</a>を入れておきましょう。</p>



<p><a href="http://userscripts.org/scripts/show/89252">Twitter add RT button for new UI for Greasemonkey</a></p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TSLRYopxUEI/AAAAAAAABIc/rboGNvYBxdE/201101041638.png" alt="Twitter add RT button for new UI for Greasemonkey"/></figure>



<p></p>



<p>インストール後、「返信」の右に「RT」「QT」ボタンが出現します。<br />
こちらは自分のツイートにも出ます。</p>



<p>（追記）<br />
こちらのユーザースクリプトをChromeで使うことも出来ます。お好みで。</p>



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



<p>Twitterの新公式ページ、<br />
クライアントをフル活用している方には少し物足りないかもしれませんが、<br />
関連ツイートとかも見やすくなっているので個人的には十分な感じです。<br />
食わず嫌いな方がいましたら是非に。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2010年に出会った愛すべきリソース達*11</title>
		<link>https://blog.mach3.jp/2010/12/29/lovely-resources-2010.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 29 Dec 2010 08:46:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Resources]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Yahoo]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1284</guid>

					<description><![CDATA[2010年も残りわずか。CS5やらHTML5やらiナントカやら忙しい1年でしたが、 せっかくなので今年出会った素晴らしいリソースを振り返ってみます。 @anywhere Welcome to @Anywhere &#124; de [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>2010年も残りわずか。CS5やらHTML5やらiナントカやら忙しい1年でしたが、<br />
せっかくなので今年出会った素晴らしいリソースを振り返ってみます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TRrzte8LnJI/AAAAAAAABH4/5TZJ_Ar76fI/201012291739.png" alt="Great Resources 2010"/></figure>



<p></p>



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



<h2 class="wp-block-heading">@anywhere</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TI-FvKGTMFI/AAAAAAAABB4/DWq3p5mDXQM/201009142322.png" alt="@anywhere"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://dev.twitter.com/anywhere">Welcome to @Anywhere | dev.twitter.com</a></h3>



<p>Twitterの機能がどのサイトでも活用出来るようになるJavaScriptリソース。<br />
認証からタイムライン読み込み、パーツのレンダリングまで。<br />
連携サービスを組むならおさえておきたい。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/04/twitter-anywhere.html">ブログで@anywhereを試してみた！ ～ どこでもTwitter | Mach3.laBlog</a></li>



<li><a href="/2010/09/auth-anywhere.html">@anywhereで認証してみる備忘録 | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">jsLint</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TAuiwlC67MI/AAAAAAAAA7k/f0V7_v6GCEM/s800/201006062143.png" alt="jsLint"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://www.jslint.com/">JSLint, The JavaScript Code Quality Tool</a></h3>



<p>JavaScriptをストリクトに書く為のチェックツール。<br />
前はWSH版がダウンロード出来たんですけど見つからなくなってますね。<br />
<a href="https://github.com/douglascrockford/JSLint">Github</a>のを使ってなんやかんやするんでしょうか。こんど試してみよう。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/06/jslint.html">JSLintでストリクトなJavaScriptを書く | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">LESS</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TC9OtbZAqRI/AAAAAAAAA9c/UGfbYnLsdWc/s800/201007032351.png" alt="LESS"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://lesscss.org/">LESS &#8211; Leaner CSS</a></h3>



<p>変数に代入したり、ネストしたり、ミックスインしたり…<br />
CSSコーディングが素晴らしくスピードアップするCSS開発キット。<br />
エディタからも簡単に呼び出せるので重宝しています。<br />
似たようなプロジェクトに「<a href="http://sass-lang.com/">Sass</a>」というのもあります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/less-on-ruby-windows.html">ゼロから導入する、Ruby LESS for Windows ～素晴らしいCSSソリューション | Mach3.laBlog</a></li>



<li><a href="/2010/08/css3-snippet-for-less.html">CSS3対応の為のLESSスニペットメモ | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">jsDoc Toolkit</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TExlCdWAOSI/AAAAAAAAA_Y/oT60gg9HcrM/s800/201007260122.png" alt="jsDoc Toolkit"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://code.google.com/p/jsdoc-toolkit/">jsdoc-toolkit &#8211; Project Hosting on Google Code</a></h3>



<p>JavaScript版のドキュメント生成ツール。<br />
こちらもエディタから使うと大変便利。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/jsdoctoolkit-from-notepad.html">エディタ（Notepad++）からJSDoc Toolkitを使ってみる | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">Modernizr</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TEb6RR1X0LI/AAAAAAAAA-4/_5uGmJsiuwg/s800/201007212239.png" alt="Modernizr"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://www.modernizr.com/">Modernizr</a></h3>



<p>HTML5の新機能等が使用可能かどうかを判別してくれるライブラリ。<br />
判別の結果はhtml要素のクラスとして出力してくれる他、<br />
メンバを直接参照する事でも結果を知ることが出来ます。</p>



<p>便利なスクリプトなのですが、最近<a href="http://headjs.com/">Head.js</a>に持って行かれた感が…<br />
こちらは未検証なのでまた後ほどレポートを。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/modernizr-js.html">「Modernizr」 モダンなクロスブラウザCSSの為の支援スクリプト | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">Raphael / gRaphael</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TDwr1qEithI/AAAAAAAAA-Q/6t9diGuL98g/s800/201007131656.png" alt="gRaphael"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://g.raphaeljs.com/">gRaphaël—Charting JavaScript Library</a></h3>



<p><a href="http://raphaeljs.com/index.html">Raphael</a>は、ベクターグラフィックを簡単に扱うためのJavaScriptライブラリ。<br />
gRaphaelはそれをグラフ描画用に拡張する為のプラグインです。<br />
投稿した時はまだドキュメントが不備でしたが…今見に行きましたがまだありませんでした！</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/graphael.html">実験室: gRaphaëlでインタラクティブなグラフを描いてみる | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">IE9.js</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TJLUD970GRI/AAAAAAAABCU/oxPr4vt8h9U/201009171134.png" alt="IE9.js"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://code.google.com/p/ie7-js/">ie7-js &#8211; Project Hosting on Google Code</a></h3>



<p>プロジェクト名としては「IE7.js」ですが、<br />
その中に含まれるIE8.js、IE9.jsやie7-squish.jsが結構便利。<br />
JavaScriptが動く事が前提になりますが、擬似クラスやHTML5の新要素の対応もしてくれます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/09/ie9js-clearfix.html">IE9.jsで実現するシンプルなclearfixとその他の恩恵 | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">YUI Compressor</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TMmzBvs9ayI/AAAAAAAABEs/ZY7JUy71f0w/201010290014.png" alt="YUI Compressor"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a></h3>



<p>Yahoo!がおくる、JavaScriptやCSSを圧縮するツール。<br />
Webページのパフォーマンス向上を図るのに欠かせません。<br />
ご一緒に<a href="http://developer.yahoo.com/yslow/">YSlow</a>（Firebugプラグイン）も是非。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/10/yui-compressor-bat.html">YUI Compressorをお手軽にするバッチファイルを書いてみる | Mach3.laBlog</a></li>



<li><a href="/2010/11/quick-tip-for-site-performance.html">今すぐ出来る、ちょこざいなサイトパフォーマンスアップ | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">mustache</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TKnnq0vc63I/AAAAAAAABDE/OOIY9hnndPo/201010042339.png" alt="mustache"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://mustache.github.com/">{{ mustache }}</a></h3>



<p>マルチランゲージテンプレートエンジン！（言い切った！）<br />
様々な言語に対応する、シンプルで使いやすいテンプレートエンジンです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/10/mustache-template-engine.html">どこでも活躍できるテンプレートエンジン「Mustache」 | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">Sammy.js</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TJjDmzzS06I/AAAAAAAABCw/rriMLBnT_6c/201009212338.png" alt="Sammy.js"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://code.quirkey.com/sammy/">Sammy.js</a></h3>



<p>Ajaxコンテンツのセッションを操る為のjQueryプラグイン。<br />
要するに、location.hashによるルーティングをウマイこと処理してくれるスクリプトです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/09/sammy-js.html">Sammy.jsでAjaxコンテンツのセッションを操る | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">jQueryMobile</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TOIVnTG4iGI/AAAAAAAABFc/mpVknEjCqqU/201011161309.png" alt="jQueryMobile"/></figure>



<p></p>



<ul class="wp-block-list">
<li><a href="http://jquerymobile.com/">jQuery Mobile | jQuery Mobile</a></li>
</ul>



<p>jQueryの作者が送る、スマートフォン向けのjQueryUIのようなもの。<br />
ルールに従ったマークアップをするだけで、各要素をそれっぽくレンダリングしてくれます。<br />
1月に正式版がリリースされる予定。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/11/jquery-mobile-for-beginner.html">はじめてのjQueryMobile | Mach3.laBlog</a></li>
</ul>
</blockquote>



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



<p>結構色々ありましたね、2010年。<br />
来年もまた素晴らしい技術に出会えますように。</p>



<p>皆様よいお年を！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ここ数日のFacebook祭を経ての雑感</title>
		<link>https://blog.mach3.jp/2010/10/13/using-facebook.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 13 Oct 2010 14:32:44 +0000</pubDate>
				<category><![CDATA[Monologue]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[SocialNetwork]]></category>
		<category><![CDATA[Tumblr]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=872</guid>

					<description><![CDATA[何がトリガーになったのかはさておき、ここ数日のFacebookの勢いが凄いです。 Twitterのタイムライン上でも所狭しと&#8221;facebook&#8221;の文字が踊り、 皆さんこぞって登録・体験してみている [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>何がトリガーになったのかはさておき、ここ数日のFacebookの勢いが凄いです。<br />
Twitterのタイムライン上でも所狭しと&#8221;facebook&#8221;の文字が踊り、<br />
皆さんこぞって登録・体験してみている模様です。</p>



<p>私も早速試してみたので、雑感などを。</p>



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



<h2 class="wp-block-heading">やはり友達がいると楽しいもの</h2>



<p>私自身、Facebookに登録したのは去年の5月でしたが、<br />
登録したっきり何をするわけでもなく放置してしまっていました。<br />
というのも、Facebook上でやりとりする相手が居なかった。</p>



<p>今回のお祭り騒ぎでTwitterのフォロワーさんを中心に、<br />
今までほぼ皆無だったFacebookの友人が増えました。<br />
やっぱり、友達が居るとネットワークサービスは楽しい。当たり前ですが。</p>



<h2 class="wp-block-heading">結局は周りに流されたい</h2>



<p>そんなわけで、どうせ試すなら賑やかな今、便乗すべきですよね。<br />
友達がいなければ機能を試そうにも試しようがないわけで。</p>



<p>結局の所ネットワークサービスは長いものに巻かれたい。<br />
というよりは自分の周囲の人がどれだけ使っているかにあわせたい。<br />
周りに流されてなんぼ、「周り」が居てこそ面白いんです。<br />
ミーハー、大いに結構じゃないですか。</p>



<h2 class="wp-block-heading">でもプラットフォームはあまり増やしたくない</h2>



<p>今後使っていくかどうかは、<br />
ひとえに周囲にあわせていく感じではあるのですが…</p>



<p>個人的には、プラットフォーム的な物をこれ以上増やしたくないという気持ちが強いです。<br />
Twitter・Tumblr・ブログ、そしてFacebookと。<br />
それぞれの活かし方をきちんと考えてあげないと、<br />
自分の情報が色んなサービスに散らばってしまって管理が行き届かなくなってしまう。<br />
Web上に漂う自分の分身がボケたりブレたりしてしまう感覚。<br />
これは気持ち悪い！</p>



<p>発言を同期する程度の仕組みは用意されてますが、<br />
それはちょっと求めている物と違います。<br />
結局発言の先にあるコミュニケーションというのは、<br />
それぞれのサービス自体の物に因る事になるわけですから。</p>



<p>とりあえず、祭に揉まれながら活かす道について思いを巡らしてみようと思います。<br />
Facebookアプリにも少し興味がありますね！</p>



<p>以上、まとまりのない雑感でした。</p>
]]></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>
		<item>
		<title>@anywhereで認証してみる備忘録</title>
		<link>https://blog.mach3.jp/2010/09/14/auth-anywhere.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 14 Sep 2010 14:35:46 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Anywhere]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=682</guid>

					<description><![CDATA[Twitterの@anywhereは既に提供を終了していますので、本記事の内容も利用出来ません。 Sunsetting @Anywhere &#124; Twitter Developers @anywhereはTwitter公式 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
  Twitterの@anywhereは既に提供を終了していますので、本記事の内容も利用出来ません。<br /> <a href="https://dev.twitter.com/blog/sunsetting-anywhere">Sunsetting @Anywhere | Twitter Developers</a>
</p>



<p>@anywhereはTwitter公式から提供されている、<br />
どのサイトでもTwitterの機能が使えるようになる便利なライブラリです。<br />
cf) <a href="/2010/04/twitter-anywhere.html">ブログで@anywhereを試してみた！ ～ どこでもTwitter</a></p>



<p>今回はこの@anywhereでユーザー認証をしてみましょう。<br />
※アプリケーションの登録等は割愛致します。<br />
※jQueryを使用しています。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TI-FvKGTMFI/AAAAAAAABB4/DWq3p5mDXQM/201009142322.png" alt="@anywhereで認証してみる備忘録"/></figure>



<p></p>



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



<ul class="wp-block-list">
<li><a href="#auth-basic">@anywhereの基本</a></li>



<li><a href="#auth-func">認証に必要な機能</a></li>



<li><a href="#auth-demo">デモ</a></li>



<li><a href="#auth-source">コード抜粋</a></li>



<li><a href="#auth-mendokusee">めんどくせーな、と思ったら</a></li>



<li><a href="#auth-fin">まとめ</a></li>
</ul>



<h2 class="wp-block-heading" id="auth-basic">@anywhereの基本</h2>



<h3 class="wp-block-heading">ライブラリのロード</h3>



<p>公式で登録したアプリケーションのAPIkeyを付加したURLで、ライブラリをロードします。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://platform.twitter.com/anywhere.js?id=&lt;ここにAPIkeyを記述&gt;&amp;v=1"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">twttr.anywhere</h3>



<p>@anywhereはtwttr.anywhereというメソッドが全ての基本です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    <span class="hljs-comment">// ここでtwを使ってなんやかんやする</span>
});
</code></span></pre>


<p>twttr.anywhereに渡したfunctionは、<br />
anywhereを使用する準備が整った時にコールされます。<br />
ここでfunctionに渡されているtwに様々な便利な機能が備えられているので、<br />
それらを使ってなんやかんやするわけですね。</p>



<h2 class="wp-block-heading" id="auth-func">認証に必要な機能</h2>



<p>cf) <a href="http://dev.twitter.com/anywhere/begin">@anywhere公式ドキュメント（英語）</a></p>



<h3 class="wp-block-heading">tw.isConnected()</h3>



<p>ユーザー認証が済んでいるかどうかをbool値で返すメソッド。<br />
認証済みかそうでないかで処理を切り分けたい時に使います。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">if</span>( tw.isConnected() ){
    <span class="hljs-comment">// 認証済みの場合の処理</span>
} <span class="hljs-keyword">else</span> {
    <span class="hljs-comment">// 未認証の場合の処理</span>
}
</code></span></pre>


<h3 class="wp-block-heading">tw.signIn()</h3>



<p>Twitterにサインインする為のメソッドです。<br />
これをコールすると、別ウィンドウでTwitterに接続するページが開き、<br />
そのページでログインして戻ってくると認証が完了する仕組みです。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"#Signin"</span>).live(<span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    tw.signin();
});
</code></span></pre>


<h3 class="wp-block-heading">twttr.anywhere.signOut()</h3>



<p>Twitterからサインアウトする為のメソッドです。<br />
※signIn()とは親が異なる点に注意。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"#Signout"</span>).live(<span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    twttr.anywhere.signOut();
});
</code></span></pre>


<h3 class="wp-block-heading">authCompleteイベント</h3>



<p>認証が完了すると、twの&#8221;authComplete&#8221;イベントがトリガーされます。<br />
認証完了時に処理を行いたい時にbindして使います。<br />
「おや？bindってjQueryじゃねーの？」とか思われるかもしれませんが、<br />
実際anywhere自体がjQueryを使用して書かれているみたいです。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">tw.bind(<span class="hljs-string">"authComplete"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    alert(<span class="hljs-string">"認証完了！"</span>);
});
</code></span></pre>


<h3 class="wp-block-heading">tw.currentUser.data()</h3>



<p>tw.currentUserには現在接続中のユーザーの情報が格納されています。<br />
ユーザーの情報を引き出すには、data()メソッドを用います。<br />
console.log()してみると分かりますが、プロパティアクセスでも取得出来ます。<br />
※公式ドキュメントでは言及されていないので、念のためdata()を経由した方がよいかもしれません</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// data()で取得</span>
alert( tw.currentUser.data(<span class="hljs-string">"screen_name"</span>) + <span class="hljs-string">"でログイン中です"</span> );
<span class="hljs-comment">// プロパティアクセスで取得</span>
alert( tw.currentUser.screenName + <span class="hljs-string">"でログイン中です"</span> );
</code></span></pre>


<p>取得できるユーザー情報のリストは、APIドキュメントを参照<br />
…するよりもconsole.log()してプロパティ見たほうが多分はやい。</p>



<h2 class="wp-block-heading" id="auth-demo">デモ</h2>



<p class="caution">
    デモページは閉鎖致しました。
</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TI-FvAiWf1I/AAAAAAAABB8/sLQRotrSt6Y/201009142300.png" alt="Demo"/></figure>



<p></p>



<ul class="wp-block-list">
<li>「Signin」ボタンをクリックすると認証用のページが開きます</li>



<li>認証が完了すると表示が切り替わってユーザー情報が表示されます</li>



<li>テンプレートに<a href="http://github.com/mach3/js-jquery-render">jquery.render.js</a>を使ってみました<br /><br />cf) <a href="/2010/09/jquery-render-js.html">シンプルなjQueryテンプレートプラグインを書いてみる</a></li>
</ul>



<h2 class="wp-block-heading" id="auth-source">コード抜粋</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    <span class="hljs-keyword">var</span> refresh = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        $(<span class="hljs-string">"#LoginStatus"</span>).html(<span class="hljs-string">""</span>);
        <span class="hljs-keyword">if</span>( !tw.isConnected() ){
            $(<span class="hljs-string">"#template-loginstatus-normal"</span>)
            .render()
            .appendTo(<span class="hljs-string">"#LoginStatus"</span>);
        }<span class="hljs-keyword">else</span>{
            <span class="hljs-keyword">var</span> cu = tw.currentUser;
            $(<span class="hljs-string">"#template-loginstatus-connected"</span>)
            .render({
                <span class="hljs-string">"screen_name"</span>: cu.data(<span class="hljs-string">"screen_name"</span>),
                <span class="hljs-string">"profile_image_url"</span>: cu.data(<span class="hljs-string">"profile_image_url"</span>),
                <span class="hljs-string">"name"</span>: cu.data(<span class="hljs-string">"name"</span>),
                <span class="hljs-string">"description"</span> : cu.data(<span class="hljs-string">"description"</span>),
                <span class="hljs-string">"location"</span>: cu.data(<span class="hljs-string">"location"</span>),
                <span class="hljs-string">"followers_count"</span> : cu.data(<span class="hljs-string">"followers_count"</span>),
                <span class="hljs-string">"friends_count"</span> : cu.data(<span class="hljs-string">"friends_count"</span>),
                <span class="hljs-string">"listed_count"</span> : cu.data(<span class="hljs-string">"listed_count"</span>)
            })
            .appendTo(<span class="hljs-string">"#LoginStatus"</span>);
        }
    };
    $(<span class="hljs-string">"#LoginStatus .signin"</span>).live( <span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
        tw.signIn();
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    });
    $(<span class="hljs-string">"#LoginStatus .signout"</span>).live( <span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
        twttr.anywhere.signOut();
        refresh();
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    });
    tw.bind(<span class="hljs-string">"authComplete"</span>, refresh);
    refresh();
});
</code></span></pre>


<h2 class="wp-block-heading" id="auth-mendokusee">めんどくせーな、と思ったら</h2>



<p>簡単に認証ボタンが実装できる、connectButton()というメソッドが提供されています。<br />
特にカスタマイズする必要がなかったり、面倒な時はこれを使っちゃえばいいですね。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TI-Fvaa6q-I/AAAAAAAABCA/RUpaFNyoEXs/201009142305.png" alt="connectButton()"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">twttr.anywhere( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">tw</span>)</span>{
    tw(<span class="hljs-string">"#MyConnectButton"</span>).connectButton();
});
</code></span></pre>


<p>サインアウトボタンにトグルしてくれたりはしないので、<br />
欲しい場合は自分で実装する必要があります。</p>



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



<p>フロントエンドだけで済んでしまうようなWebアプリケーションならば、<br />
お手軽に使えて良いですね。<br />
Webベースのクライアントなんかを作りたい時にも良いかもしれません。<br />
さ、次はPHPのOAuthだ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Twitter+WebShotなWebサービス</title>
		<link>https://blog.mach3.jp/2010/09/12/twitter-webshot-service.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 12 Sep 2010 04:39:32 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Bookmarklet]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Screenshot]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[Twitter]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=670</guid>

					<description><![CDATA[TweetShot、ならびに tweetshots は既にサービスを終了している様です。 TwitterでWebサイトのスクリーンショットを共有するサービス「TweeShot」を試してみました。 それと、Typoでたどり [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
  TweetShot、ならびに tweetshots は既にサービスを終了している様です。
</p>



<p>TwitterでWebサイトのスクリーンショットを共有するサービス「TweeShot」を試してみました。 それと、Typoでたどり着いたもう１サービス。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TIxTWpdtdjI/AAAAAAAABBk/HhgDGwsPhXc/201009121309.png" alt="TweeShot"/></figure>



<p></p>



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



<h2 class="wp-block-heading">TweeShot</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TIxTWs2taGI/AAAAAAAABBo/6A2aftRmiQg/201009121307.png" alt="TweeShot"/></figure>



<p></p>



<p>TwitterIDでログインし、サイトのURLを入力すれば<br />
Webサイトのスクリーンショットを撮ってくれます。</p>



<h2 class="wp-block-heading">tweetshots</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TIxWypzjWzI/AAAAAAAABBw/0999Z2HJC1U/201009121327.png" alt="tweetshots"/></figure>



<p></p>



<p>そしてこちらがTypoで行きついたtweetshots。<br />
Tweeshotとは一文字違いですが、こちらはWebサイトのスクリーンショットではなく、<br />
ツイートのスクリーンショットを撮ってくれるサービス。<br />
ログインは不要で、URLを入力するだけで生成してくれます。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
