私は、cronジョブとして実行され、定期的にGoogleショッピングAPI経由で商品リストを更新するPHPスクリプトの作業を開始しています。GSC_ClientとoAuth2へのアクセス
私はGSC Client library for PHPをダウンロードし、トークンを取得するまでにはGoogle Shopping API documentationを処理しようとしています。しかし、URLを生成した後にトークンを実際に要求する方法に関して、ドキュメントのどこかに足りない一歩があるように感じます。
ここでは、これまでに私のコードです:
require ("./lib/shoppingclient/GShoppingContent.php");
const G_MERCHANT_ID = '**********';
const G_CLIENT_ID = '**********';
const G_CLIENT_SECRET = '**********';
$obj_client = new GSC_Client (G_MERCHANT_ID);
// Obtain an OAuth2 token to access the API with
$obj_token = new GSC_OAuth2Token (G_CLIENT_ID, G_CLIENT_SECRET, USER_AGENT);
$str_url = $obj_token -> generateAuthorizeUrl ('urn:ietf:wg:oauth:2.0:oob');
echo ($str_url . PHP_EOL);
/* @var $obj_response _GSC_Response */
$obj_response = $obj_token -> makeAuthenticatedRequest (curl_init ($str_url));
echo ($obj_response);
私はコマンドラインから上記を実行すると、私が手:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=blah-blah-blah-etc-etc-etc ...
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
Fatal error: Uncaught exception 'GSC_TokenError' with message 'invalid_request' in /var/samba/GoogleShoppingTest/lib/shoppingclient/GShoppingContent.php on line 624
GSC_TokenError: invalid_request in /var/samba/GoogleShoppingTest/lib/shoppingclient/GShoppingContent.php on line 624
Call Stack:
0.0002 321888 1. {main}() /var/samba/GoogleShoppingTest/logintest.php:0
0.0065 1446196 2. GSC_OAuth2Token->makeAuthenticatedRequest() /var/samba/GoogleShoppingTest/logintest.php:19
0.2797 1446684 3. GSC_OAuth2Token->refresh() /var/samba/GoogleShoppingTest/lib/shoppingclient/GShoppingContent.php:722
0.3992 1448152 4. GSC_OAuth2Token::raiseFromJson() /var/samba/GoogleShoppingTest/lib/shoppingclient/GShoppingContent.php:565
私は」かなり確かにCURLオブジェクトを初期化する必要はないはずですが、どうやって取得するのか分かりません生成されたURLを解析して実際の応答に変換します。
generateAuthorizeUrl()で生成されたURLにアクセスすると、許可を求めるボタンが表示されたページが表示されます。私がそれをすると、私が知る限り、有効なトークンを持ったページが得られます。
しかし、これは明らかにユーザーにボタンをクリックして許可を与えてもらうことを頼むことができないので、明らかに私はどこかのトラックから外れています。
GSC_Clientを完全自動スクリプトでOAuthと連携させることができた人はいますか?もしそうなら、私はここで間違って何をしていますか?
UPDATE:このアプリケーションでは、APIタイプを「インストール済みアプリケーション」として設定しました。これは、このアプリケーションの正しいAPIタイプと思われます。これは、スクリプトに共有秘密情報を提供し、https://localhost
またはurn:ietf:wg:oauth:2.0:oob
をURLとして使用することを意味します。
UPDATE 2:GSCクライアントのサポートライブラリがサーバー間シナリオをサポートしているとは思いません。私が秘密鍵の認証方法を使用したい場合、さらなる研究ではGoogle APIs client libraryが必要であることが示されています。
これは私がこれまでに書くことができたコードです:
require ("./lib/google/oauthclient/Google_Client.php");
require ("./lib/google/shoppingclient/GShoppingContent.php");
const G_MERCHANT_ID = '********';
const G_CLIENT_ID = '********';
const G_CLIENT_EMAIL = '********';
const G_CLIENT_KEY_PATH = '/path/to/the/privatekey.p12';
const G_CLIENT_KEY_PW = 'notasecret';
$obj_client_auth = new Google_Client();
$obj_client_auth -> setApplicationName ('test');
$obj_client_auth -> setClientId (G_CLIENT_ID);
$obj_client_auth -> setAssertionCredentials (new Google_AssertionCredentials (
G_CLIENT_EMAIL,
array (OAUTH_SCOPE),
file_get_contents (G_CLIENT_KEY_PATH),
G_CLIENT_KEY_PW));
$obj_client_auth -> getAuth() -> refreshTokenWithAssertion();
// Get a token
$obj_token = json_decode ($obj_client_auth -> getAccessToken());
print_r ($obj_token);
私は上記のコードを実行すると、私はお返しに、以下に似た何かを得る:
stdClass Object
(
[access_token] => ya29.AHES6ZRJohl2AfbQCKbFxNlagSqLGcjHwiylqASX1ygmwg
[expires_in] => 3600
[created] => 1359123809
)
私は推測していますこれは有効なアクセストークン応答です。
しかし、GSC_Clientライブラリで返されたトークンを使用する方法はまだわかりません。私はこれらの両方のライブラリがGoogleから始まったことを知っていますが、私は、彼らがお互いに何かをしていることはほとんどない別のチームによって開発されたという印象を得ています。 。誰かがここで何をすべきかを知っていれば、あなたが持っているかもしれないアドバイスに感謝します。
UPDATE 3
私は実際にGoogleからのデータをプルするのOAuthライブラリを使用するために管理してきましたが、それは、ショッピングの検索APIからです。ショッピングのためにContent APIを使用して商品リストを操作する必要があります。 contribディレクトリでさえ、そのためのoAuthライブラリを提供するクラスは存在しないようです。
FYI、ここでは検索APIリクエスト(マイナス定数)を行うコードです:
$obj_client_auth = new Google_Client();
$obj_client_auth -> setApplicationName ('test');
$obj_client_auth -> setClientId (G_CLIENT_ID);
$obj_client_auth -> setAssertionCredentials (new Google_AssertionCredentials (
G_CLIENT_EMAIL,
array (
//'https://www.googleapis.com/auth/structuredcontent',
'https://www.googleapis.com/auth/shoppingapi'
),
file_get_contents (G_CLIENT_KEY_PATH),
G_CLIENT_KEY_PW));
$obj_client_api = new Google_ShoppingService ($obj_client_auth);
$arr_results = $obj_client_api -> products -> listProducts ('public', array (
'country' => 'GB',
'q' => '"mp3 player" | ipod',
'rankBy' => 'relevancy'
));
print_r ($arr_results);
あなたは壊れているものを共有していただけますか?ストラクチャードコンテンツスコープに対して承認されたアクセストークンを取得したら、GET/POSTリクエストとともに製品APIに渡すことができます。あなたは正確なエラーを共有してください。 –
google_clientライブラリから取得したトークンをGSC_Contentライブラリに挿入する方法がないように見えることが「壊れている」ということです。彼らは明らかにお互いに互換性がありません。 – GordonM