0

evernoteAPIをphpで使う(oauth)

oauthのログインはサンプルを参考にするのが一番だけど、そのままだと動かない。(11/14現在)
やるべき事は3つ。
環境はmacOS10.7.2。php5.3.6。
■peclのoauthをインストールする。
$ sudo pecl install oauth

/usr/include/php/ext/pcre/php_pcre.h:29:18: error: pcre.h: No such file or directory
In file included from /private/tmp/pear/temp/oauth/php_oauth.h:47,
from /private/tmp/pear/temp/oauth/oauth.c:14:
/usr/include/php/ext/pcre/php_pcre.h:37: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/php/ext/pcre/php_pcre.h:38: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/php/ext/pcre/php_pcre.h:44: error: expected specifier-qualifier-list before ‘pcre’
make: *** [oauth.lo] Error 1
ERROR: `make' failed

で止まる。
pcreというのが入ってないかららしいので、macportsでインストール。
$ sudo port install pcre

インストールが完了したので再度挑戦。
が、同じところで同様のエラーが発生。

pcre.hが読み込めてないので、コピーで済ます。
$ sudo cp /opt/local/include/pcre.h /usr/include/

$ sudo pecl install oauth
はい、これで無事インストールされたので、php.iniにextensionを追記してapacheを再起動。
extension=oauth.so

■ショートタグを有効にする
ショートタグ(php_flag short_open_tag On

■config.phpを編集する。
evernoteから送られてきたキーを入力する。
sample/oauth/config.php
define('OAUTH_CONSUMER_KEY', 'hogehoge');
define('OAUTH_CONSUMER_SECRET', 's42fefc90ff2vf');
 
本番環境移行時は、EVERNOTE_SERVERも変更する必要がある。
define('EVERNOTE_SERVER', 'https://sandbox.evernote.com');

サンプルには、詳細版ログインと簡易版ログインが用意されてる。
– 詳細版ログイン(1ステップずつ動作を確認できる。)
sample/oauth/sampleApp.php
– 簡易版ログイン(実際のアプリでも使える。)
sample/oauth/index.php

どちらかのスクリプトにブラウザからアクセスして無事接続できたらとりあえずは安心。

ここからは他のAPIでoauthを使ったことある人なら、全然難しくない。
基本的に処理はすべてfuncion.phpに書かれている。

リクエストトークンとリクエストトークンシークレットを取得しにいく。
oauth_tokenとoauth_token_secretという名前になってるけど要はリクエストトークン。

$requestTokenInfo = $oauth->getRequestToken(REQUEST_TOKEN_URL, getCallbackUrl());
 
if ($requestTokenInfo) {
$_SESSION['requestToken'] = $requestTokenInfo['oauth_token'];
$_SESSION['requestTokenSecret'] = $requestTokenInfo['oauth_token_secret'];
$currentStatus = 'Obtained temporary credentials';
}


evernoteの認証画面(getAuthorizationUrl)にリダイレクト

リダイレクトから戻ってきたら、今度はaccess_tokenを取得させるためにリダイレクト。
oauth_verifierをsessionにセット
if (isset($_GET['oauth_verifier'])) {
$_SESSION['oauthVerifier'] = $_GET['oauth_verifier'];
$currentStatus = 'Content owner authorized the temporary credentials';
return TRUE;
}



アクセストークンをsessionにセット
$oauth->setToken($_SESSION['requestToken'], $_SESSION['requestTokenSecret']);
$accessTokenInfo = $oauth->getAccessToken(ACCESS_TOKEN_URL, null, $_SESSION['oauthVerifier']);
if ($accessTokenInfo) {
$_SESSION['accessToken'] = $accessTokenInfo['oauth_token'];
$_SESSION['accessTokenSecret'] = $accessTokenInfo['oauth_token_secret'];
$_SESSION['shardId'] = $accessTokenInfo['edam_shard'];
$currentStatus = 'Exchanged the authorized temporary credentials for token credentials';
return TRUE;
}

この$_SESSION[‘accessToken’]がeveronteAPIでデータを取得する度に必要です。
access_tokenは認証画面ででた期間中は変わることはないのでこれを使いまわします。

次はnoteStoreやuserStoreを使うサンプル予定。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です