Croudiaで始めるAPI入門

はじめまして。@hnle0です。

PHPとかPerlとかすらまともに書けない上にしばらくPHPばっかりやってる人です。

今回は[ikr](http://qiita.com/ikr7)氏の用意してくれた[Croudia4PHP](https://github.com/ikr7/Croudia4PHP)を使ってCroudiaのAPIをPHPから叩いてみよう！というお話。(えらい人任せだな)

MarkDownの練習も兼ねて…

#Croudiaってなんぞや

<blockquote class="twitter-tweet" lang="ja"><p>日本版ツイッターか？と囁かれる新型SNS『Croudia（クローディア）』その文字数制限は372文字。HTML5を駆使しスマホに最適化されたデザインは快適な操作性を実現。しかも今なら好きなIDが取れる可能性が高い。<a href="https://t.co/kHNpLTaRYf">https://t.co/kHNpLTaRYf</a></p>&mdash; ミッシー (@pokemishi) <a href="https://twitter.com/pokemishi/statuses/417061567104942080">2013, 12月 28</a></blockquote>

<blockquote class="twitter-tweet" lang="ja"><p>『つぶやき』ではなく『ささやき』で投稿する新型SNS『Croudia』その文字数制限は372文字。HTML5を駆使しスマホに最適化されたデザインは新時代の操作性を実現。しかも今なら好きなIDを取れる可能性が高い。<a href="https://t.co/kHNpLTaRYf">https://t.co/kHNpLTaRYf</a></p>&mdash; ミッシー (@pokemishi) <a href="https://twitter.com/pokemishi/statuses/417016123876319232">2013, 12月 28</a></blockquote>

>■Croudiaとは
Croudiaは会員登録をすれば無料（一部有料）で使うことができるミニブログサービスです。従来のミニブログサービスと異なり、372文字の投稿文字数を確保している為、英文でもストレスの無い文章作成が可能となります。また、Croudiaは多彩なエンターテインメントコンテンツを配信するゲームプラットフォームでもありミニブログと連動したソーシャル性の高いコンテンツを提供します。
&mdash; http://croudia.co.jp/NR20120406.html


CroudiaはTwitterのようなミニブログ…なのですが、最近はスプレッド(Twitterで言うRT)が「イイネ」になったり公式引用が「シェア」になったり某SNSを意識した方向転換を行っているようです。

Croudia公式のUIには今のところjQuery Mobileが使われているのですが…PCで見るには向いてないですね…やっぱりｗ
新UIへの刷新は秋ごろに発表されているのですが、執筆時点でまだ実装されていません。
-- 執筆中に本日リリースが発表されました。(12/29 14:15)

----
枕が長くなりましたが本題へ。

#Croudia4PHP
- Croudia4PHPは今年の夏に公開されたCroudia APIを叩くやつです。

とりあえず認証から取得、postまでやってみる。

以下の作業の前に[Croudiaのアカウントを用意](https://croudia.com/regists/welcome)してください。

#Croudia4PHPを展開、アップロード
Croudia4PHPをサーバーにうｐ。
ローカルでも無料レンタルホスティングでもレンサバでもVPSでもOK。とりあえずhttpsを叩くことのできるPHP
の使えるサーバーにcroudia4php.phpをうｐします。
__croudia4php.phpだけあれば問題ないです。__


#開発者トークンの取得
Croudia APIを使用するには __全てのエンドポイントにおいて__ OAuth認証が必要になります。　
まずはそのためのconsumer keyを取得します。

##Croudia Developer Centerへアクセス。
https://developer.croudia.com/ にアクセスしてCroudiaのアカウントでログイン。

アプリケーション管理=>アプリケーション登録 の順にすすむ。

##アプリケーション登録
- アプリケーションの名称
- アプリケーションの説明
- 開発者名
- リダイレクトURI

を入力してトークンを取得。なおリダイレクトURLはこの後用意するcallback.phpのパスを指定。

登録が出来るとConsumer keyとConsumer secretが発行されてますね。

#config.phpを作る
別にこれはC4Pの仕様を考えると必要ないです。  
今回はConsumer keyとConsumer tokenを `config.php` に書き込んでおきます。これをincludeしてるファイル全てに書くか、それとも[githubにあるサンプル](https://github.com/ikr7/Croudia4PHP/tree/master/example)にあるようにSESSIONで渡しても問題ないです。

```php:config.php
<?

$ck = "YOUR_CONSUMER_KEY";
$cs = "YOUR_CONSUMER_SECRET";
```


#トークン認可ログインページへのURLを取得する

```php:login.php
<?

require_once "croudia4php.php";
require_once "config.php";

//Croudia4PHPオブジェクトを生成します.
$c4p = new Croudia4PHP($ck,$cs);



//認証用のURLを取得します.
$url = $c4p -> getAuthorizeURL();

//認証ページへリダイレクト
header("Location: $url");

```

#アクセストークンを取得する。
認証からのリダイレクトを受け取り、アクセストークンを取得します。  
認証に必要なコードは `$_GET["code"]` に入ります。

```php:callback.php
<?

//セッションの開始
session_start();

require_once "croudia4php.php";
require_once "config.php";

//code パラメータがあるかどうかをチェック
if (!isset($_GET["code"])){
    die("Error: No code");
}

//Croudia4PHPオブジェクトの生成
$c4p = new Croudia4PHP($ck,$cs);

//AccessTokenを取得してセット
$c4p -> getAccessToken($_GET["code"]);

//SESSIONに認証情報を保存
$_SESSION["c4p"] = serialize($c4p);


//とりあえずトークンを画面に吐いてみる。
var_dump($c4p);


```
これでとりあえずトークンが取得出来ました。なお __このトークンは1時間のみ有効__ なので注意。

#タイムラインを取得する
タイムラインを取得します。主にCroudiaではPublic Timelineがメインで使われるので、それを最新のものから100件取得してみましょう。  
`$par` でリクエストパラメーターを設定しています。 パラメーターは https://developer.croudia.com/docs/api10 を参照。

```php:timeline.php
<?

//セッション開始
session_start();

//ライブラリinclude
require_once "croudia4php.php";

//$c4pオブジェクトを展開
$c4p = unserialize($_SESSION["c4p"]);

//パラメーターは配列で指定。
$par = (
   "count" => 100,
);

//APIを叩く。返り値はレスポンスをC4Pがjson_decodeして返してくれる。
$pub = $c4p -> GET_statuses_public_timeline ($par);

//とりあえずHTTPヘッダー
header("Content-type: text/html; charset=UTF-8");


//$pubは配列で返ってくるのでforeachで順番に吐いてみる。実際に使うときは配列チェックすること。
foreach($pub as $st){
   echo $st->user->name . " says : ".$st->text."<br>\n";
}

```

#ささやく
ささやきを送信してみます。

```php:postwhisper.php
<?

//セッション開始
session_start();

//ライブラリinclude
require_once "croudia4php.php";

//$c4pオブジェクトを展開
$c4p = unserialize($_SESSION["c4p"]);

//パラメーターは配列で指定。
$par = (
   "status" => "てすとささやき。",
);

//APIを叩く
$status = $c4p->POST_statuses_update($par);

//ささやいたstatusの詳細
echo "<pre>";
var_dump($status);
```

#トークンのリフレッシュ
(執筆中) 
#c4p用意されていないエンドポイントを叩く
(執筆中)
#画像をPOSTする
(執筆中)

ざっとこんな感じでCroudiaのPHPが簡単に使えるって話でした。TwitterやFacebook,Google+など、それぞれ仕様はバラバラしてるけど応用は効くはずですね。それぞれに用意されているライブラリがあれば丁度いいしなければほかのを参考に書けば…