Developer's Blog

Google+ に PHP でログインしてみよう

こんにちはこんにちは! エンジニア川端です。
ウェブサービスをブラウザに統合する「Fenrir Pass Connect」、みなさん、楽しんで頂けてますか?

Fenrir Pass にログインすることで色々なウェブサービスを利用できる「Fenrir Pass Connect」。
今日は、その中でも実装が比較的面倒だった Google+ について、ログインするまでの流れをサンプルスクリプトでご紹介したいと思います。

Google+ APIェ……

Google+ にプログラムからアクセスして色々やりたい人のために「Google+ API」というものが用意されています……が!

Note: The Google+ API currently provides read-only access to public data. All API calls require either an OAuth 2.0 token or an API key.

……だそうで。現状は、パブリックなものを読み出すことだけが可能、と。
わたしは投稿したいのですよ。プログラムに投稿させたいのですよ。

というわけで、通常 WEB ブラウザから利用する時の手順をプログラムにやらせることにしました。
今回はサンプルなので、
1. Google+ ログイン画面で ID/PW を入力
2. Google+ ログイン後の画面から、自分の名前が表示されている部分を取得する
ということをやってみます。

ソースコード

</p>
<!--?php 

require_once 'Pit.php';
require_once 'simple_html_dom.php';

// id, pw の類いは Pit で管理すると便利
$pit = new Pit();
$pit--->
<p>switchProfile('login'); $conf = $pit-&gt;get('google'); // ログインページにアクセス。Cookie 使います $m = curl_init(); curl_setopt_array($m, array( CURLOPT_URL =&gt; 'https://accounts.google.com/Login', CURLOPT_RETURNTRANSFER =&gt; true, CURLOPT_COOKIEJAR =&gt; 'mycookie', CURLOPT_COOKIEFILE =&gt; 'mycookie', ) ); $response = curl_exec($m); curl_close($m); $fields = array(); // ログインページの HTML から、<input type="hidden" />のものを取得 // simple_html_dom.php で XPath を使えばラクチン $html = str_get_html($response); foreach ( $html-&gt;find('input[@type="hidden"]') as $e ) $fields[$e-&gt;name] = $e-&gt;value; // ログインのための情報。フォームに入力する部分です $fields['Email'] = $conf['id']; $fields['Passwd'] = $conf['pw']; // ログイン後に遷移するページ。Google+ にアクセス $fields['continue'] = $fields['followup'] = 'https://plus.google.com/'; // ログイン! ログインページにアクセスした時の cookie を使う $m = curl_init(); curl_setopt_array($m, array( CURLOPT_URL =&gt; 'https://accounts.google.com/ServiceLoginAuth', CURLOPT_RETURNTRANSFER =&gt; true, CURLOPT_COOKIEJAR =&gt; 'mycookie', CURLOPT_COOKIEFILE =&gt; 'mycookie', CURLOPT_POST =&gt; true, CURLOPT_POSTFIELDS =&gt; $fields, CURLOPT_FOLLOWLOCATION =&gt; true, CURLOPT_USERAGENT =&gt; 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1 Safari/7534.51.22 Sleipnir/3.5.0.1', ) ); $response = curl_exec($m); curl_close($m); // ログイン後の画面から、自分の名前の部分を取得してみる $html = str_get_html($response); echo $html-&gt;find('span[@id="gbi4t"]', 0)-&gt;innertext . PHP_EOL; 

今回も、使っている人が多いと思われる PHP でサンプル作成しています。

  • サンプルを作成するにあたり、「PHP Simple HTML DOM Parser」と「PHP-Pit」を利用させて頂きました。pit を使っていない人は、
    $pit = new Pit();
    $pit->switchProfile('login');
    $conf = $pit->get('google');

    の 3 行を消して

    $fields['Email'] = $conf['id'];
    $fields['Passwd'] = $conf['pw'];

    の部分に Google+ ログイン ID/PW を記述してください。
    でも、pit 便利なので、この機会に導入をお勧めします。

    • HTTP 関連部分もなにかライブラリを使えばよいのでしょうが、PHP でのデファクトが何なのか知らないので、curl で書きました。見づらいかもしれませんが、ご容赦ください。

    コマンドラインから実行すると、Google+ の右上に表示されている、自分の名前の部分を取得できたのではないかと思います。

    Google+

    本当はここからが大変なのですが、お好きな方にとって、ここから先を解析するのがタマラン部分だと思いますので、本日はここまでに。

    あなたの愛用ウェブサービスを教えてください!

    Fenrir Pass Connect」は、今後も色々なウェブサービスに対応していく予定です。
    みなさまからの「このウェブサービスに対応して欲しい!」というリクエスト、お待ちしております。
    その際には、ぜひ「Fenrir Pass Connect」をご利用くださいね ;-D


Copyright © 2019 Fenrir Inc. All rights reserved.