<?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>cURL &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/curl/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Fri, 14 Jan 2011 01:00:47 +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>goo.glがAPI公開されたらしいので試してみた</title>
		<link>https://blog.mach3.jp/2011/01/14/try-goo-gl-api.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 14 Jan 2011 01:00:47 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GoogleCode]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[URL]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1402</guid>

					<description><![CDATA[Overview &#8211; Google URL Shortener API &#8211; Google Code Google製の短縮URLサービス「goo.gl」のAPIが公開されたそうなので、 試しに使って [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://code.google.com/intl/ja/apis/urlshortener/overview.html">Overview &#8211; Google URL Shortener API &#8211; Google Code</a><br />
Google製の短縮URLサービス「<a href="http://goo.gl/">goo.gl</a>」のAPIが公開されたそうなので、<br />
試しに使ってみたメモ。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TS8gn_MfUzI/AAAAAAAABJU/XBsVQmuNc-c/201101140055.png" alt="goo.glがAPI公開されたらしいので試してみた"/></figure>



<p></p>



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



<ol class="wp-block-list">
<li>必要なもの</li>



<li>短縮してみよう</li>



<li>展開してみよう</li>



<li>めんどくさいのでクラスにしてみる</li>



<li>(おまけ) JavaScriptで展開する</li>
</ol>



<h2 class="wp-block-heading">必要なもの</h2>



<dl>
<dt>APIのURLを控えておく</dt>
<dd>https://www.googleapis.com/urlshortener/v1/url</dd>
<dt>APIキーを取得しておく</dt>
<dd><a href="https://code.google.com/apis/console/">Google APIs Console</a>で<br />
<em>「URL Shortener API」</em>をアクティブにしてAPIキーを控えて来る</dd>
</dl>



<p>今回は、PHP+cURLでやってみることに。<br />
とりあえず持っている情報を変数につっこむ。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$api_url = <span class="hljs-string">"https://www.googleapis.com/urlshortener/v1/url"</span>;
$api_key = <span class="hljs-string">"&#91;あなたのAPIキーを入れてください]"</span>;
</code></span></pre>


<h2 class="wp-block-heading">短縮してみよう</h2>



<p>URLの短縮は、APIに次のような<em>JSON</em>を<em>POST</em>で送りつけます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>{&#8220;longUrl&#8221;: &#8220;http://www.google.com/&#8221;}</p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-php">$longUrl = <span class="hljs-string">"https://blog.mach3.jp/"</span>;

$curl = curl_init();
$curl_params = <span class="hljs-keyword">array</span>(
    <span class="hljs-comment">// APIのURLに ?key=&#91;your-key]を足してやります</span>
    CURLOPT_URL =&gt; $api_url . <span class="hljs-string">"?"</span> .
        http_build_query( <span class="hljs-keyword">array</span>( <span class="hljs-string">"key"</span> =&gt; $api_key ) ),
    <span class="hljs-comment">// ヘッダをapplication/jsonに</span>
    CURLOPT_HTTPHEADER =&gt; <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span> ),
    <span class="hljs-comment">// POSTで送ります</span>
    CURLOPT_POST =&gt; <span class="hljs-keyword">true</span>,
    <span class="hljs-comment">// ロングURLの情報をJSONに加工して渡します</span>
    CURLOPT_POSTFIELDS =&gt; json_encode( <span class="hljs-keyword">array</span>( <span class="hljs-string">"longUrl"</span> =&gt; $longUrl ) ),
    CURLOPT_RETURNTRANSFER =&gt; <span class="hljs-keyword">true</span>
);
curl_setopt_array( $curl, $curl_params );
$result = json_decode( curl_exec( $curl ) ); <span class="hljs-comment">// 返り値はJSONなのでデコード</span>
var_dump( $result );
</code></span></pre>


<p>レスポンスはJSONで返って来るので、json_decodeでオブジェクトにしてやります。<br />
最終的に格納されている情報はこんな感じ。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">object(stdClass)<span class="hljs-comment">#1 (3) {</span>
  &#91;<span class="hljs-string">"kind"</span>]=&gt;
  string(<span class="hljs-number">16</span>) <span class="hljs-string">"urlshortener#url"</span>
  &#91;<span class="hljs-string">"id"</span>]=&gt;
  string(<span class="hljs-number">19</span>) <span class="hljs-string">"http://goo.gl/ZZKde"</span>
  &#91;<span class="hljs-string">"longUrl"</span>]=&gt;
  string(<span class="hljs-number">21</span>) <span class="hljs-string">"https://blog.mach3.jp/"</span>
}
</code></span></pre>


<h2 class="wp-block-heading">展開してみよう</h2>



<p>展開は簡単。パラメータくっつけてGETでとってくるだけです。<br />
先ほど作った「http://goo.gl/ZZKde」を展開してみます。<br />
こんなリクエストをおくって返事をもらってるだけ。<br />
労力惜しむならfile_get_contents()でもよし。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://www.googleapis.com/urlshortener/v1/url?key=[your_api_key]&#038;shortUrl=[展開したいURL]
</div></figure>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-php">$shortUrl = <span class="hljs-string">"http://goo.gl/ZZKde"</span>;

$curl = curl_init();
$curl_params = <span class="hljs-keyword">array</span>(
    CURLOPT_URL =&gt; $api_url . <span class="hljs-string">"?"</span> .
        http_build_query( <span class="hljs-keyword">array</span>(
            <span class="hljs-string">"key"</span> =&gt; $api_key,
            <span class="hljs-string">"shortUrl"</span> =&gt; $shortUrl
        )),
    CURLOPT_RETURNTRANSFER =&gt; <span class="hljs-keyword">true</span>
);
curl_setopt_array( $curl, $curl_params );
$result = json_decode( curl_exec( $curl ) );
</code></span></pre>


<p>こんな感じに帰ってきました。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">object(stdClass)<span class="hljs-comment">#2 (4) {</span>
  &#91;<span class="hljs-string">"kind"</span>]=&gt;
  string(<span class="hljs-number">16</span>) <span class="hljs-string">"urlshortener#url"</span>
  &#91;<span class="hljs-string">"id"</span>]=&gt;
  string(<span class="hljs-number">19</span>) <span class="hljs-string">"http://goo.gl/ZZKde"</span>
  &#91;<span class="hljs-string">"longUrl"</span>]=&gt;
  string(<span class="hljs-number">21</span>) <span class="hljs-string">"https://blog.mach3.jp/"</span>
  &#91;<span class="hljs-string">"status"</span>]=&gt;
  string(<span class="hljs-number">2</span>) <span class="hljs-string">"OK"</span>
}
</code></span></pre>


<h2 class="wp-block-heading">めんどくさいのでクラスにしてみた</h2>



<dl>
<dt>GoogleUrl</dt>
<dd><a href="https://gist.github.com/69e4a0c19e4776924a21">gist: 69e4a0c19e4776924a21 &#8211; Shorten and expand urls using Google URL Shortener API- GitHub</a></dd>
</dl>



<h3 class="wp-block-heading">使い方</h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// createメソッドで初期化。</span>
<span class="hljs-comment">// new GoogleUrl( $api_key ) でもいいです。</span>
$gu = GoogleUrl::create( <span class="hljs-string">"&#91;your-api-key]"</span> );

<span class="hljs-keyword">try</span> {
    <span class="hljs-comment">// shortenメソッドで短縮</span>
    $shorten = $gu-&gt;shorten( <span class="hljs-string">"http://www.mach3.jp"</span> );
    var_dump( $shorten );

    <span class="hljs-comment">// expandメソッドで展開</span>
    $expand = $gu-&gt;expand( $shorten-&gt;id );
    var_dump( $expand );

} <span class="hljs-keyword">catch</span>( <span class="hljs-keyword">Exception</span> $e ){ <span class="hljs-keyword">die</span>( $e-&gt;getMessage() ); }
</code></span></pre>


<h2 class="wp-block-heading">(おまけ) JavaScriptで展開する</h2>



<p><a href="https://gist.github.com/d98215a9cae6ef22e741">gist: d98215a9cae6ef22e741 &#8211; expand url using goo.gl shortener api- GitHub</a></p>



<p>jQuery使って展開してみました。<br />
「callback」パラメータでJSONP出来るので、大変簡単。<br />
つまりこんなリクエストをすることになります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://www.googleapis.com/urlshortener/v1/url?key=[your_api_key]&#038;shortUrl=[展開するURL]&#038;callbck=[コールバック関数名]
</div></figure>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> expandGoogleUrl = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> url, key, callback </span>)</span>{
    $.ajax({
        <span class="hljs-attr">url</span> : <span class="hljs-string">"https://www.googleapis.com/urlshortener/v1/url"</span>,
        <span class="hljs-attr">dataType</span> : <span class="hljs-string">"jsonp"</span>,
        <span class="hljs-attr">data</span> : { <span class="hljs-attr">shortUrl</span> : url, <span class="hljs-attr">key</span> : key },
        <span class="hljs-attr">success</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> data </span>)</span>{
            callback( data.error  ? <span class="hljs-literal">false</span> : data.longUrl );
        }
    });
};

<span class="hljs-comment">// example</span>
expandGoogleUrl (
    <span class="hljs-string">"http://goo.gl/fbsS"</span>,
    <span class="hljs-string">"&#91;your api key]"</span>,
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> url </span>)</span>{
        <span class="hljs-built_in">console</span>.log( url );
    }
);
</code></span></pre>


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



<p>QRコードがそのまま作れたり（ <a href="http://goo.gl/pvqxy.qr">http://goo.gl/pvqxy.qr</a> ）、<br />
アクセス解析出来たり（ <a href="http://goo.gl/info/pvqxy">http://goo.gl/info/pvqxy</a> ）と結構便利なサービスです。<br />
短縮したい際には使ってみようかな！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHPメモ : file_get_contentsの代替にcURLを使う</title>
		<link>https://blog.mach3.jp/2010/12/21/use-curl-for-filegetcontents.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 21 Dec 2010 02:00:58 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1257</guid>

					<description><![CDATA[PHPで外部のリソースを取得するのに大変便利なfile_get_contents関数ですが、 cURLの環境があるなら利用したほうがパフォーマンスがいいぞというお話。 パフォーマンスの差 具体的にどれくらいパフォーマンス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPで外部のリソースを取得するのに大変便利な<a href="http://php.net/manual/ja/function.file-get-contents.php">file_get_contents</a>関数ですが、<br />
<a href="http://curl.haxx.se/">cURL</a>の環境があるなら利用したほうがパフォーマンスがいいぞというお話。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TQ-OyjppmCI/AAAAAAAABHg/AaOvwHPJ3Qw/201012210211.png" alt="file_get_contentsの代替にcURLを使う"/></figure>



<p></p>



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



<h2 class="wp-block-heading">パフォーマンスの差</h2>



<p>具体的にどれくらいパフォーマンスが変わるのかというと…<br />
モバイル回線のノートでYahoo!のトップページを取得してざっくり計測したところ、</p>



<ul class="wp-block-list">
<li>file_get_contents : 4秒前後</li>



<li>cURL : 2秒前後</li>
</ul>



<p>概ねこんな感じとなりました。<br />
勿論時間帯や回線など様々な要因にもよりますが、<br />
ちょっと無視出来ない数字ですね。</p>



<h2 class="wp-block-heading">cURLを使う</h2>



<h3 class="wp-block-heading">簡単な使い方</h3>



<p>cf) <a href="http://php.net/manual/ja/book.curl.php">PHP: cURL &#8211; Manual</a></p>



<ol class="wp-block-list">
<li><em>curl_init()</em>で初期化</li>



<li><em>curl_setopt()</em>でオプションを設定して</li>



<li><em>curl_exec()</em>で実行</li>



<li><em>curl_close()</em>で終了</li>
</ol>



<p>というのが一連の流れです。<br />
curl_setoptで渡すオプションにより、cURLさんにどんな動作をさせるのかを設定します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$url = <span class="hljs-string">"http://www.example.com"</span>;
$ch = curl_init(); <span class="hljs-comment">// 1. 初期化</span>
curl_setopt( $ch, CURLOPT_URL, $url ); <span class="hljs-comment">// 2. オプションを設定</span>
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, <span class="hljs-keyword">true</span> );
$result = curl_exec( $ch ); <span class="hljs-comment">// 3. 実行してデータを得る</span>
curl_close(); <span class="hljs-comment">// 4. 終了</span>
</code></span></pre>


<h3 class="wp-block-heading">オプションについて</h3>



<p>オプション一覧<br />
cf) <a href="http://www.php.net/manual/ja/function.curl-setopt.php">PHP: curl_setopt &#8211; Manual</a></p>



<p>今回使うものだけ軽くメモ。</p>



<dl>
<dt>CURLOPT_URL</dt>
<dd>アクセスするurlです。これがないと始まりません。</dd>
<dt>CURLOPT_HEADER</dt>
<dd>ヘッダ文字列を一緒に出力するかどうかのBoolean値。<br />
邪魔なのでfalseにします。</dd>
<dt>CURLOPT_RETURNTRANSFER</dt>
<dd>curl_execの返り値を文字列にする為のBoolean値。<br />
これをtrueにしてやらないと、データが直接出力されます。</dd>
<dt>CURLOPT_TIMEOUT</dt>
<dd>cURLさんに頑張ってもらう秒数です。<br />
これを超えると諦めてfalseを返します。</dd>
</dl>



<h2 class="wp-block-heading">関数にまとめてみる</h2>



<p>簡単に使えるように関数にまとめてみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">curl_get_contents</span><span class="hljs-params">( $url, $timeout = <span class="hljs-number">60</span> )</span></span>{
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_HEADER, <span class="hljs-keyword">false</span> );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, <span class="hljs-keyword">true</span> );
    curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
    $result = curl_exec( $ch );
    curl_close( $ch );
    <span class="hljs-keyword">return</span> $result;
}

<span class="hljs-comment">// test</span>
$result = curl_get_contents( <span class="hljs-string">"http://www.example.com"</span>, <span class="hljs-number">120</span> );
</code></span></pre>


<p>第二引数はタイムアウトの秒数です。</p>



<h2 class="wp-block-heading">おわりに</h2>



<p>オプションを見るだけでも分かるように、cURLは他にも相当色々な事が出来そうです。<br />
「Curl」だと別のプログラミング言語の事をさしてしまうので注意。</p>



<ul class="wp-block-list">
<li><a href="http://curl.haxx.se/">cURL公式</a></li>



<li><a href="http://ja.wikipedia.org/wiki/CURL">cURL &#8211; Wikipedia</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
