ラベル API の投稿を表示しています。 すべての投稿を表示
ラベル API の投稿を表示しています。 すべての投稿を表示

2013年3月5日火曜日

[アフィリエイト]Amazon Product Advertising API のデータ構造がアイテムによって微妙に違う件

Amazonの Product Advertising APIを使って商品情報を取得し、商品画像のURLを取得しようとしているんだけど、取得したXML内のアイテムによってデータの構造が微妙に違うのでメモ。赤い方は、ImageSets要素内に入らないと画像URLが無い。青い方は、Item要素直下にImageの要素がある。前者は珍しいパターン。


2012年12月2日日曜日

[アフィリエイト]楽天アフィリエイトが他のアフィリエイトとの併用可能になった?

※下の追記のところで色々と訂正していますので、最後まで読んで頂きたく。

2ヶ月くらい前に楽天アフィリエイトの規約を読んだ際は
他のアフィリエイトサービスとの併用はだめです、って書いてあった気がしたのだけど、
変わったのか、僕の読み間違えかわからないけど、併用していいみただね。

以下このページhttp://affiliate.rakuten.co.jp/guide/faq/から引用。

Q 他社のアフィリエイトプログラムと同時利用は可能ですか?
A 既に他社のアフィリエイトプログラムを利用されている場合でも、同時に楽天アフィリエイトをご利用になることが可能です。また、同一のページで他社のアフィリエイトプログラムでの広告と楽天アフィリエイトでの広告を掲載することも問題ありません。
ただし、他社のアフィリエイトプログラムの規約によっては、楽天アフィリエイトとの同時利用が禁止されている場合もございますのでご注意ください。

ただ、以下のページより、楽天ブログだと、楽天アフィリエイトのみしか使っちゃだめみたいですね。
http://portal.faq.rakuten.co.jp/app/answers/detail/a_id/4679

 【追記】
2ヶ月前に読んだ規約というのは楽天アフィリエイトではなく、
楽天ウェブサービスの規約だった。  http://webservice.rakuten.co.jp/guide/rule
すみません。

これによると、以下とのこと。

第10条(禁止行為)
(4)ウェブサービスの使用によって楽天アフィリエイト以外の方法で収入を得ること(当社が明示的に許可した場合を除く)
(5)楽天アフィリエイトの成果対象となる商品またはサービス(ウェブサービスによるものを含むがこれに限られない)について、楽天アフィリエイト以外のアフィリエイトプログラムを利用すること(当社が明示的に許可した場合を除く)

がっくし。これによると、やはり楽天ウェブサービスを使った場合は、
楽天以外のアフィリエイトサービス使っちゃだめ、というように理解できる。

でも、よくよく楽天のQAサイト調べてみると以下のような記述があった。
http://webservice.faq.rakuten.co.jp/app/answers/detail/a_id/14259

Q 他社のウェブサービスで取得した商品を併置させることは可能でしょうか?
A 楽天ウェブサービスで取得した商品のページに 他社のウェブサービスで取得した商品を並存させることは問題ありません。(提供元を表示頂ければ)

但し、楽天ウェブサービスを利用して取得した情報を用いて楽天のアフィリエイトリンクを作らずに、他社サービスのアフィリエイトリンクを作り収入を得ることが規約上問題になりますのでご留意お願いします。(規約第10条(5)項)

規約上問題にならない例外が、FAQ#15にありますリンクシェア(LinkShare)のアフィリエイトになります。
あれ、併置させていの?
あっ、そいういうことか。
もしかしたら、自分に都合の良い解釈かもしれないけど、
例えば、楽天APIで取得した商品情報のリンク先として、Amazonのアフィリエイトサイトの
URLを指定してはいけない、ということ。
つまり、逆に言えば、楽天APIで取得した情報には楽天のアフィリエイトURLを指定、
Amazon APIで取得した情報にはAmazonのアフィリエイトURLを指定してあげていれば
一つのサイト内に併置してもOK、ということ。
だったら、こっちにとっても都合がいい。
こういう理解であってるよね?






2012年10月15日月曜日

[Error記録]"Sorry, that page does not exist","code":34

Twitter OAuth認証時に新たなErrorが出た。

ブラウザ上ではこのようなError。
5~11行目を見るとわかるように、requestTokenとaccessTokenの取得には成功しているのに、
なぜか、11行目でTwitter側から情報が取得できず、 "Sorry, that page does not exist","code":34
 というメッセージが返ってきている。
ただ、この状態で、別画面に遷移してみると、認証されてユーザ情報が表示された。
ログイン時、ユーザ情報をTwitter側から更新する仕組みになっているが、
更新は行われず、取得したaccessTokenでログインのみした状態となったと思われる。


Notice (8): Undefined index: id_str [APP\controllers\users_controller.php, line 66]Code | Context            )));
        }
        $output = call_user_func_array(array(&$controller, $params['action']), $params['pass']);$consumer    =    OAuth_Consumer

$requestToken    =    OAuthToken
OAuthToken::$key = "XXXXXXXXXXXXXXXXXXXXX"
OAuthToken::$secret = "XXXXXXXXXXXXXXXXXXXXX"
$accessToken    =    OAuthToken
OAuthToken::$key = "XXXXXXXXXXXXXXXXXXXXX"
OAuthToken::$secret = "XXXXXXXXXXXXXXXXXXXXX"
$json    =    "{"errors":[{"message":"Sorry, that page does not exist","code":34}]}"
$twitterData    =    array(
    "errors" => array(
    array()
)
)UsersController::twtrCallback() - APP\controllers\users_controller.php, line 66
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 204
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 171
[main] - APP\webroot\index.php, line 86
Notice (8): Undefined index: screen_name [APP\controllers\users_controller.php, line 67]Code | Context            )));
        }
        $output = call_user_func_array(array(&$controller, $params['action']), $params['pass']);$consumer    =    OAuth_Consumer

$requestToken    =    OAuthToken
OAuthToken::$key = "XXXXXXXXXXXXXXXXXXXXX"
OAuthToken::$secret = "XXXXXXXXXXXXXXXXXXXXX"
$accessToken    =    OAuthToken
OAuthToken::$key = "XXXXXXXXXXXXXXXXXXXXX"
OAuthToken::$secret = "XXXXXXXXXXXXXXXXXXXXX"
$json    =    "{"errors":[{"message":"Sorry, that page does not exist","code":34}]}"
$twitterData    =    array(
    "errors" => array(
    array()
)
)UsersController::twtrCallback() - APP\controllers\users_controller.php, line 67
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 204
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 171
[main] - APP\webroot\index.php, line 86
Notice (8): Undefined index: profile_image_url [APP\controllers\users_controller.php, line 70]Code | Context            )));
        }
        $output = call_user_func_array(array(&$controller, $params['action']), $params['pass']);$consumer    =    OAuth_Consumer

$requestToken    =    OAuthToken
OAuthToken::$key = "XXXXXXXXXXXXXXXXXXXXX"
OAuthToken::$secret = "XXXXXXXXXXXXXXXXXXXXX"
$accessToken    =    OAuthToken
OAuthToken::$key = "XXXXXXXXXXXXXXXXXXXXX"
OAuthToken::$secret = "XXXXXXXXXXXXXXXXXXXXX"
$json    =    "{"errors":[{"message":"Sorry, that page does not exist","code":34}]}"
$twitterData    =    array(
    "errors" => array(
    array()
)
)UsersController::twtrCallback() - APP\controllers\users_controller.php, line 70
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 204
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 171
[main] - APP\webroot\index.php, line 86
Warning (512): SQL Error: 1048: Column 'user_id' cannot be null [CORE\cake\libs\model\datasources\dbo_source.php, line 684]Code | Context
        if ($this->error) {
            $this->showQuery($sql);$sql    =    "INSERT INTO `users` (`user_id`, `user_name`, `access_token_key`, `access_token_secret`, `img_url`, `updated`, `created`) VALUES (NULL, NULL, 'XXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXX', NULL, '2012-10-15 16:15:39', '2012-10-15 16:15:39')"
$error    =    "1048: Column 'user_id' cannot be null"
$out    =    nullDboSource::showQuery() - CORE\cake\libs\model\datasources\dbo_source.php, line 684
DboSource::execute() - CORE\cake\libs\model\datasources\dbo_source.php, line 266
DboSource::create() - CORE\cake\libs\model\datasources\dbo_source.php, line 750
Model::save() - CORE\cake\libs\model\model.php, line 1342
User::update() - APP\models\user.php, line 52
UsersController::twtrCallback() - APP\controllers\users_controller.php, line 72
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 204
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 171
[main] - APP\webroot\index.php, line 86
Query: INSERT INTO `users` (`user_id`, `user_name`, `access_token_key`, `access_token_secret`, `img_url`, `updated`, `created`) VALUES (NULL, NULL, 'XXXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXX', NULL, '2012-10-15 16:15:39', '2012-10-15 16:15:39') 
Warning (2): Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\rakuzon\cake\libs\debugger.php:686) [CORE\cake\libs\controller\controller.php, line 742]Code | Context */
    function header($status) {
        header($status);$status    =    "Location: http://127.0.0.1/rakuzon/main/index"header - [internal], line ??
Controller::header() - CORE\cake\libs\controller\controller.php, line 742
Controller::redirect() - CORE\cake\libs\controller\controller.php, line 721
UsersController::twtrCallback() - APP\controllers\users_controller.php, line 82
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 204
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 171
[main] - APP\webroot\index.php, line 86 
https://dev.twitter.com/discussions/11595
ここに対処策が出ていた。 ユーザ情報を引き出す際のURLを以下のように変更したら正常に動作した。
http://twitter.com/account/verify_credentials.json
 ↓
http://api.twitter.com/1/account/verify_credentials.json

また、以下のページによると
https://dev.twitter.com/discussions/10803 
現在以下を使用できないように変更中のようだ。
  • All API endpoints on www.twitter.com and twitter.com.
  • Endpoints on api.twitter.com without /1, /1.1 or /oauth in the fully qualified URL.
私の場合、twitter.comでアクセスし、1や1.1等のバージョンも無かったのでだめだった。
ただ、ソースの他の部分でまだtwitter.comで動いているところもあるので、
バージョンが無いのがダメだったということだろう。
twitter.comのままの部分は直さないと
今後またおかしなエラーが発生してしまうかもしれない。

2012年9月22日土曜日

[Error記録]Twitter Oauthログイン時のエラー

今朝最初にログインしようとしたとき、こんなエラーが出た。


で、修正も何もせずにすぐに同じようにログインしようとしたら、
正常にログインできた。

なんなんだろ、request_tokenがTwitter側からうまく帰ってくる前に処理が進んじゃってるからかな。


 【2012/10/03追記】
この現象、朝PCを起動して初めてログインしようとすると発生するんだよな。
今日も発生したので、「戻る」を押して、もう一度「許可」を押したら発生した。
その際、
$json = $consumer->get($accessToken->key, $accessToken->secret, 'http://twitter.com/account/verify_credentials.json', array());
で得られる$jsonをログに出力してみたんだけど、その結果が、
 {"error":"Could not authenticate you.","request":"\/account\/verify_credentials.json?oauth_consumer_key=・・・・・

"Could not authenticate you."というメッセージがあった。

これで検索すると、Could not authenticate you
というページでtwitterのリクエスト先のURLにhttpsをつければよい、
といった意見があったので試してみよう。
またユーザ側のクライアントの設定で「常にSSLを使用する」、といった設定をしている 場合に発生するとのこと。 クライアントとはおそらくブラウザのこと。 こちらも試してみよう。

【2012/10/03追記②】

ちなみに、本日の追記の時は、一度失敗したCallbackURLをもう一度
ブラウザでたたいたので、シミュレーションだったのだが、先ほど、
お昼休みにPCを落として、またログインしてみたら発生して、
ログを見たら新たな発見があった。
2012-10-03 16:50:15 Debug: requestToken
2012-10-03 16:50:15 Debug: oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXX&oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
2012-10-03 16:50:15 Debug: accessToken
2012-10-03 16:50:15 Debug: 
2012-10-03 16:50:15 Debug: Notice (8): Trying to get property of non-object in [C:\xampp\htdocs\rakuzon\app\controllers\users_controller.php, line 55]
2012-10-03 16:50:16 Debug: json
2012-10-03 16:50:16 Debug: {"error":"Could not authenticate you.","request":"\/account\/verify_credentials.json?oauth_consumer_key=
requestTokeをセッションから取得することはできているのだが、
accessTokenをTwitter側から取得できていない、ということがわかった。
つまり以下がうまくいっていないようだ。
$accessToken=$consumer->getAccessToken('http://api.twitter.com/oauth/access_token',$requestToken); 
【2012/10/04追記】
上記のURLをhttpからhttpsにしてもダメだった。
なんでだろうなー。

【2012/10/05追記】
何も修正していないのに、なぜか今日エラーが出ずにいけた。

2012年9月20日木曜日

[CakePHP]TwitterのOAuth認証とAuthコンポーネントを連携させる

Twitterのログイン認証を自分のサイトで利用できるAPIを使用し、
CakePHPのAuthコンポーネントを連携させてみた。
難しくて時間がかかってしまったので概念と実装方法を説明する。

 概念


まずは概念から。
流れは以下の三つの図の通り。図1→図3という時系列で処理が進んでいく。
APIを使用する側のサイトをConsumerと呼ぶらしい。
また、パソコンの絵はユーザの端末を表している。
(excelで図を作ったが、bmpファイルにしたらぼやけて汚くなっちゃった。
どうすればきれいな図の画像ファイルできるかな。)

図1



図2




 図3



 実装方法 

 

1.Twitter API https://dev.twitter.com のサイトで自分のサイトの情報を登録。


 自分のTwitterアカウントでログインしたら右上にマウスを持っていくと現れる「My Applications」を押す。次の画面で「Create a new application」を押す。

現れる入力画面で自分のサイトの情報を入力する。
「Callback URL」以外は適当でもよさそう。
Callback URLは上の概念の「⑦Callback URLにリダイレクト」でTwitter側から
リダイレクトされる際のURLである。
このURLにはAuthコンポーネントで使用するモデルのコントローラに
専用のアクションを用意し、そのURLを指定する。
私の場合はUsersコントローラにtwtrCallback()というアクションを作ったので、

http://127.0.0.1/rakuzon/users/twtrCallback

とした。まだ、開発用なので自IPアドレスを指定している。
一つ注意点として、localhosotは指定できないので127.0.0.1を指定する。
このサイト参照。 Twitter アプリケーションのコールバックURLにlocalhostを指定する

2.Cnsumer KeyとConsumer Secretを控えておく


システムがTwitterのAPIを使うための、「システムに一つ」のIDとパスワードのようなもの。
「My applications」画面から、自分が今登録したサイト名をクリックした画面で、
Detailsタブを参照することにより確認できる。
これでTwitter側で行う作業は終わり。

3.OAuthを使うためのCakePHP用のライブラリをダウンロード、インストール


Consuming OAuth-enabled APIs with CakePHP

上記でダウンロードできる。
ただ、CakePHP 1.X系を使用している場合は、
「get the version for the older CakePHP 1.x.」
というリンクからダウンロードする。

自分はcakephp-cakephp-1.3.15-9-gacd25c3.zipを使っているが、
最初2.X用のものをダウンロードし使ってみたが、動かなかった。

ファイルを解凍したら、app/vendros直下にOAuthというフォルダをフォルダごと
配置する。これでインストールは完了。

4.ソースコードを書く


コメント増量中。
コメント中の丸の数字は上記の概念図の丸の数字に対応している。
まずはAuthで使うモデルのコントローラ。
私の場合は、users_controller.php
<?php
//インストールしたライブラリを使用するためにこの1行を入れる。
App::import('Vendor','oauth',array('file'=>'OAuth'.DS.'oauth_consumer.php'));


class UsersController extends AppController {

    var $name = 'Users';
    var $components = array('Auth');

    function beforeFilter()
    {
        $this->Auth->allow('index', 'login', 'twtrCallback');

        //Authの認証で使うIDとパスワードはデフォルトでは'username'と'password'だが
     //それぞれaccess_token_keyとaccess_token_secreteに変更する。当然Usersテーブルにも同カラムを準備している。
        $this->Auth->fields = array('username' => 'access_token_key', 'password' => 'access_token_secret');
       
        //これをやらないと、app_controllerで行った設定が反映されないらしい。
        parent::beforeFilter();
    }
    //①で呼び出されるURL
    public function index() {
        $consumer=new OAuth_Consumer(
            '【2で控えたご自分のCnsumer Key】',
            '【2で控えたご自分のCnsumer Secret】');

        // ②、③ request_tokenを取得。
        //認証後、「http://127.0.0.1/rakuzon/users/twtrCallback」にリダイレクトする
        $requestToken=$consumer->getRequestToken(
        'http://twitter.com/oauth/request_token',
        'http://127.0.0.1/rakuzon/users/twtrCallback');


        // 認証後、アクセストークンを取得する際に必要なので保存
        $this->Session->write('request_token',$requestToken);

        // ④、⑤Twitterの認証ページにリダイレクト
        $this->redirect('http://twitter.com/oauth/authorize?oauth_token='
        .$requestToken->key);
    }

    //⑦のリダイレクト先URLとなるアクション。
    public function twtrCallback() {
        if (isset($this->params['url']['denied'])) {
            echo 'access denied';
            return;
        }
        $consumer=new OAuth_Consumer(
            '【2で控えたご自分のCnsumer Key】',
            '【2で控えたご自分のCnsumer Secret】');
        $requestToken=$this->Session->read('request_token');

        //access_token取得する。
        //⑧、⑨ access_tokenはユーザごとに払い出されるもの。
        $accessToken=$consumer->getAccessToken(
            'http://api.twitter.com/oauth/access_token',$requestToken);
        //⑩、⑪ access_tokenを使用し、ユーザ情報をTwitter側から引き出す。
        $json = $consumer->get($accessToken->key, $accessToken->secret, 'http://twitter.com/account/verify_credentials.json', array());
        $twitterData = json_decode($json, true);

        //⑫モデルに渡す。モデルでは保存が行われている。
        $this->User->update(
        Array(
            "user_id" => $twitterData['id_str'],
            "user_name" => $twitterData['screen_name'],
            "access_token_key" => $accessToken->key,
            "access_token_secret" => $accessToken->secret,
            "img_url" => $twitterData['profile_image_url']
            )
        );
       
        //⑬Authのlogin()処理のために型にaccess_token_keyとaccess_token_secretを入れてあげる。
        $user['User']["access_token_key"] = $accessToken->key;
        $user['User']["access_token_secret"] = $accessToken->secret;
       
        //⑬Authのlogin処理
        $this->Auth->login($user);

        $this->redirect('/main/index');
    }

    public function logout(){
        $this->Auth->logout();
    }

    public function login(){
    }
}

users/indexがユーザがまずログインするときにアクセスするURLとなる。
つまり、ログインボタンなどに設定するURLだ。
twtrCallback()がTwitterからのリダイレクト先のURLとなる。
概念の「⑦CallbackURLにリダイレクト」。
63~70行目はログインするごとにユーザの情報をアップデートする
ことを意味している。

つづいて全てのコントローラーが継承するapp_controller.php。

class AppController extends Controller {

    function beforeFilter(){
    //全ての画面でログイン状態のチェックを行うため、
    //authのユーザ情報を取得する。
        $auth=$this->Auth->user();
        $this->set('auth',$auth);
    }
}

なお、view側で$authという変数に値が入っているかどうかで
ログインしているかどうかを確認する。全画面でログイン状態確認を
行うのでapp_controllerで行っている。
$this->session->check('Auth');で最初チェックしようと思ったのだが、
なぜかlogout後もtrueが帰ってきてしまう。
値の中身は空だったけど、変数の型が残っててもtrueとなってしまうからかも。
このあたりあまり定かではないけど、 ログイン状態確認の処理は、
後々Cookieを利用した自動ログインの機能を
追加する予定で、大きいプログラムになりそうなので、view側でなく、
controller側にあったほうがいいかな、と思い、深追いしないでおく。


そして、モデル。user.php

<?php

class User extends AppModel {

    var $name = 'User';

    public function update($user_data)
    {
        $user = $this->find('first', array('conditions' => array('user_id' => $user_data['user_id'])));
        if($user) {
            $user_data['id'] = $user['User']['id'];
        }
        $this->create();
        $this->save(Array("User" => $user_data));
    }
}

9~12行目でDB中にあるuser_idとTwitterから引っ張ってきた情報のuser_idを
引き合わせて、同じユーザ情報にはきちんと上書きしてくれるようになっている。
user_idというのはTwitterでTwitterアカウント一つ一つに割り当てられる数字のID。

このモデルに対応するテーブルは以下。
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(64) NOT NULL,
  `user_name` varchar(64) NOT NULL,
  `access_token_key` text NOT NULL,
  `access_token_secret` text NOT NULL,
  `img_url` varchar(512) NOT NULL,
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_id` (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;


users_controller.phpの80行目で、ログイン後にmain/indexに飛ばしているが、
飛ばし先でどのようにauthを扱っているかを解説するためmain_controller.phpを載せる。

<?php
//3でインストールしたライブラリを使うための1行
App::import('Vendor','oauth',array('file'=>'OAuth'.DS.'oauth_consumer.php'));

class MainController extends AppController {

    public $name = 'Main';
    public $uses = array('Item','Tag','Theme');
   
    //Authを使うため。
    var $components = array('Auth');

    var $paginate = array(
            'Theme' => array (
            'limit' => 10,
            'order' => array(
                'theme.id' => 'asc'
            )
        ),
            'Tag' => array (
            'limit' => 10
        )
        );

    function beforeFilter(){

    //未ログイン状態でもindexにはアクセスを可能とするため。
        $this->Auth->allow('index');

        parent::beforeFilter();
    }

    function index(){
        //この辺はもともとあった処理
        $this->Theme->hasMany['Item']['limit'] = 5;
        $this->Theme->hasMany['Item']['order'] = 'Item.id asc';
        $this->Theme->unbindModel(array('belongsTo'=>array('User')),false);
        $themes = $this->paginate('Theme');
        $tags =   $this->paginate('Tag');
        $this->set('themes',$themes);
        $this->set('tags',$tags);
    }
}

11行目は全部のコントローラに設定するものなので本当はapp_controllerにもたせ
たかった。でもなぜかapp_controllerにもたせることができなかったので、各コントローラで
設定。ここ参照。[CakePHP]AppController でコンポーネント設定するとsessionコンポーネントが使えない。
28行目でindexを許容している。ログイン状態によって同じ画面でも出す部品を
変えようとしているだけだから、基本的に全部許容なんだよね。
だから、$this->Auth->allow(*);にしてアクセスさせない、登録系や管理系の画面だけ
$this->Auth->deny();で設定すればいい気もする。


つづいて、実際にTwitterのユーザ名やTwitterのプロフィール画像を表示するmain/index.ctp。
こいつは抜粋。

        <?php if(!empty($auth['User']['id'])): ?>
        <div>
            <img src = "<?php echo $auth['User']['img_url'];?>"/>
            <br/>
            <?php echo $auth['User']['user_name'];?>
        </div>
        <?php endif;?>


1行目でcontroller側で取り出したauthのユーザ情報があるか確認。
無ければ、未ログインと判断し、3行目のプロフィール画像や5行目のユーザ名は表示しない。
この部品は全画面に共通的に使おうと思う。

あとは、必要に応じてlogin.ctpやlogout.ctp等のviewも作成する。

5.課題


この実装だと、ブラウザを閉じてもう一度アクセス、ログインしようとすると、
また、Twitterのアプリケーション認証画面に飛ばされて承認ボタンを押す必要
が出てくる。
それだと面倒くさいのでCookieを使用して自動ログインを実装してもいいかもしれない。

6.参考にしたURL


CakePHP で OAuth 認証を使ったログイン認証・保持や会員データの保持・更新をするコード
[プログラミング][PHP][CakePHP][twitter]CakePHPでOAuth
CakePHPでOAuthを使ったログインと自サービスのログインの両方に対応させてみました。


※CakePHPのバージョンはcakephp-cakephp-1.3.15-9-gacd25c3.zip

2012年9月14日金曜日

[API]楽天の商品URLから、商品コードを取得するには

うわー、これでいけそう。

http://blog.fkoji.com/2012/03130824.html

 プログラムで商品ページのHTMLを取得し、
javascript内に記述されている商品コードを取得。

それができたら、商品検索APIで商品の詳細情報を取得することができるね。

検索とかだけでAPI使うのはつまらないから、
これができれば面白いことができそう。