PHPで新浪微薄APIを使う。
なかなか新浪微薄と連携する方法がないよな。。。っと思ってそれなら作っちゃえってことで
新浪微薄APIをとりあえず使ってみることにしました。
私はこれではてなダイアリーの投稿記事をWEIBOに登録すると言う連携を行ってますが、
はてなのRSSをそのままWeiboに入れているだけです。
まあ「はてな」でなくてもFaceBookやTwitterでもできちゃうんですけどね。
(2014年5/29日の時点でまだ動いてます)
開発者用の登録を行いAPIKEYを取得する。
Weiboの開発用APIを使うにはまず、Weibo登録する必要があります。そのあと新浪微薄・开发平台
に行って開発用の登録をします。
するとAPIKEYがもらえます。
APIKEYがもらえてやっと開発を行うことができます。
詳しくはまた今度書きます。
新浪微薄APIを使って何を作る?
とりあえずSDKを落とします开发文档からPHP用のSDKをダウンロードします
中にはサンプルが入っていてこれはそのまま動きます。
ログインしていない場合ログイン画面がでてログイン後、自分のWeiboの一覧がでてきます。
私がやりたいのは、バッチみたいな感じで自分のブログのRSSを読み込んでWEIBOに登録する。
ということです。このままじゃ使えません。
ログイン画面をすっ飛ばして、
自動でログインする機能がひつようですね。
とりあえず一件書き込むところまで作ってみます。
新浪微薄APIを使ったサンプルソースコード
config.php→定義用saetv2.ex.class.php→新浪微薄のAPIをコールするクラス(これはSDKそのまま)
callback.php→ログイン後に遷移するページ
index.php→メインページ
config.phpでAPIKEY等を宣言します。
<?php
header('Content-Type: text/html; charset=UTF-8');
$app_key='XXXXXXXX';
$app_secret='XXXXXXXXXXXXXX';
$callback_url='http://jibunnodomein/callback.php';
?>
callback.phpにログイン後の処理を書きます。
コールバック関数はアクセストークンを何とかしてメインに返したい
セッションに入れてもうまくいかない場合があったので、
レスポンスで無理やり返した。
<?php
require_once('config.php');
require_once ('saetv2.ex.class.php');session_start();
if(isset($_GET['code']) && $_GET['code']!=''){
$o = new SaeTOAuthV2($app_key, $app_secret);
$keys = array ();
$keys ['code'] = $_GET['code'];
$keys ['redirect_uri'] = $callback_url;
try{
$result = $o->getAccessToken ( 'code', $keys );
}catch(Exception $e){
echo "callback2";//エラーの場合
return;
}
}if(isset($result['access_token']) && $result['access_token']!=''){
$_SESSION['sina_ssession'] = $result['access_token']; //access tokenをセッションに保存
echo $result['access_token'];//成功の場合アクセストークンを返す
}else{
echo "callback1";//失敗アクセストークンが帰ってこない。
}?>
index.php
メイン処理の流れ
セッションを確認。(すでにログイン済みかを確認する)
セッションがある場合はセッションよりアクセストークンを取得して一件投稿する。
curlでログインページを呼び出しログインする。
コールバック関数でアクセストークンが帰ってくるのでそれを利用して
SaeTClientV2オブジェクトを作成し一件投稿する。
コールバックPHPでセッションに入れてるんですが、なぜか取れないことがある。
<?php
//index.php
require_once 'config.php';
require_once 'saetv2.ex.class.php';
session_start();//セッションの確認、ない場合はログインする。
$sina_session=isset($_SESSION['sina_ssession'])?$_SESSION['sina_ssession']:'';
if($sina_session==''){
$o = new SaeTOAuthV2 ($app_key, $app_secret);
//$oauth_urlに自分用のログインURLが帰ってくる
$oauth_url = $o->getAuthorizeURL ($callback_url);$postdata ['client_id'] = $app_key;
$postdata ['response_type'] = 'code';
$postdata ['redirect_uri'] = urlencode($callback_url);
$postdata ['action'] = 'submit';
$postdata ['userId'] = 'xxxxxxxx@xx.com';//weiboのアカウント
$postdata ['passwd'] = 'xxxxxxxxxxxxx';//ウェイボのパスワード
$postdata ['isLoginSina'] = 0;
$postdata ['from'] = '';
$postdata ['regCallback'] = '';
$postdata ['state'] = '';
$postdata ['ticket'] = '';
$postdata ['withOfficalFlag'] = 0;
//パラメータを文字列にする。
$postdata_str = '';
foreach ( $postdata as $dk => $dv ) {
$postdata_str .= $dk . '=' . ($dv) . "&";
}
$postdata_str = trim ( $postdata_str, '&' );$ch = curl_init ();
$user_agent = 'shantian(sthz.lolipop.jp)';curl_setopt ( $ch, CURLOPT_URL, "https://api.weibo.com/oauth2/authorize" );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $ch, CURLOPT_REFERER, $oauth_url );
curl_setopt ( $ch, CURLOPT_USERAGENT, $user_agent );
curl_setopt ( $ch, CURLOPT_POST, true );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postdata_str );
//コールする。戻りの値はコールバックPHPからのレスポンス。
$response = curl_exec ( $ch );
//echo 'response='.$response;
if($response=='callback2'){
echo '異常事態';
}elseif($response=='callback1'){
echo '失敗';
}else{
$sina_session=$response;
}
}else{
echo $sina_session;
}
if($sina_session!=''){
$c = new SaeTClientV2($app_key, $app_secret,$sina_session);
$c->update('testあああい');
}else{
echo "書き込まない";
}
?>
そのため毎回ログインのロジックに行ってしまう。
何でかわかりませんが、仕方ないのでレスポンスでも返すことにしました。
一度ログインしてしまうと、コールバックPHP側には飛んでくれない。
そのためアクセストークンはからなずどこかに取っておく必要がある。
セッションに入れるのが一番手っ取り早いと思ったのですが。。。
また何度も試行錯誤してるとAPIがいうことを聞かなくなってしまいます。
その時は$oauth_urlに入ってるURLを開いて、開発何とかってところのリンクを踏むと治りました。
とりあえずこれで自動ログインして一件書くところまではできましたが、
まだ問題があるかもしれません。
投稿はできたのでこれでアプリつくれますね。
新浪WEIBOのAPIが変更にならないように祈ります。
開発者登録をちゃんと最後までやってないので登録した人が、
来自未通过审核应用(審査が通ってないアプリケーション)ってなってるけど
これこのままだと使えなくなったりするのかな???
shěnhé【审核】審査する,突き合わせる
関連エントリ
- 動画配信サイト土豆のナルト疾風伝は日本公認?
- 結構はまるかも?アンドロゲーム天天酷〓
- 微信のゲームにDDR系の節奏大帥が追加になりました。
- 微信5でゲームが追加になりました。
- 新浪微博!中国版ツイッターといわれる新浪weibo(ウェイボ)のアカウントを作成。
- 超簡単!QQアカウントを取得しよう微信を使おう。そして中国の友達をつくろう!
- 中国のWEBサービスでブログを書く(易网)
- 中国の無料WEBメールを取得
- 微信(WeChat)を使おう(微信weixin,Wechat)
- PHPで数値文字参照をUTF-8に変換
- ロリポップコロリプランでcronを動かす。限られた環境でもどうにかしてみる。
- 中国のWEBメール(易网)からPHPを使って送信する。
- XMAPP FOR WINDOWSでffmpegを使う