Closed andychan94 closed 7 years ago
@nodirashidov @hatimitusiropp 結構シンプル!!いい感じ!!
ACCESS_KEY_ID
みたいな設定ファイルは、config
中に入れたいっす。@TakenokoPro @nodirashidov URLは出てくるんですけど、file_get_contentsできないんですが、これで画像取得できますか?(;'∀') ↓エラー内容 file_get_contents(https://aws.amazonaws.jp/onca/xml? ・・・いろんな情報・・・) [function.file-get-contents]: failed to open stream: php_network_getaddresses: getaddrinfo failed:
ちなみにこのコードって、下のサイトみたいなプラグインなしでも動かせるってことですよね? http://www.abe-tech.jpn.com/program/amazonapi/cakephp%E3%81%AB%E3%82%88%E3%82%8Bamazonapi%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97/
@hatimitusiropp あれ? 自分がプッシュした奴 a6fe88c はXML取れた? たぶん、取れて"本一覧画面"で一覧が出てきたはずだけど・・・。
あと、画像取得はXML取った後にリダイレクトしてimgファイル取ってこないといけないんじゃないかな?
プラグイン使ってもいいけど、あんまバリデーション入ってないな。 作りは一緒だから、自前で良いと思うよ。
AmazonApiComponent.php
の構成はこれで
class AmazonApiComponent extends Component {
// 本の情報
private $bookInfo = array();
/**
* 情報取得のURLを生成
* serchWord:検索ワード
* option:その他必要なパラメータ
*/
function generateUrl(serchWord, option);
/**
* APIで通信
* url: API接続したいurlパス
*/
function callApi(url);
/**
* 画像取得
* url: 画像のurlパス
*/
function getImage(url);
/**
* DOMにマッピング
*/
function mapToDom();
`/**
の、画像のURLパスって、"http://images-jp.amazon.com/images/P/ISBN.09.MZZZZZZZ" みたいなURLであってますか?
`/**
* 画像取得
* url: 画像のurlパス
*/
public function getImage($url){
// URLから取得するXML
$xml = @simplexml_load_file($url);
$base_param = 'AWSAccessKeyId='.Access_Key_ID;
$params = array();
$params['Service'] = 'AWSECommerceService';
$params['Version'] = '2016-12-12'; //Versionは基本的には最新のものでOK
$params['Operation'] = 'ItemLookup';
$params['ItemId'] = '4886263070';
$params['IdType'] = 'ISBN'; //今回はISBNから情報を取得するのでISBN
$params['SearchIndex'] = "Books"; //今回は本の情報なのでBooks
$params['AssociateTag'] = Associate_tag;
$params['ResponseGroup'] = 'ItemAttributes,Offers, Images ,Reviews '; // 必要なレスポンスを設定(詳しくは下で説明)
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
//パラメータを自然順序付け・昇順で並び替え
ksort($params);
$canonical_string = $base_param;
function urlencode_RFC3986($str)
{
return str_replace('%7E', '~', rawurlencode($str));
}
foreach ($params as $k => $v) {
$canonical_string .= '&'.urlencode_RFC3986($k).'='.urlencode_RFC3986($v);
}
$parsed_url = parse_url(Access_URL);
$string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}";
$signature = base64_encode(
hash_hmac('sha256', $string_to_sign, Secret_Access_Key, true)
);
$url = Access_URL.'?'.$canonical_string.'&Signature='.urlencode_RFC3986($signature);
file_put_contents("/texserver/src/Image", $url);
}
`
getImageの作り方のイメージがなんか具体的にできないんですが、この関数の中で、画像を保存するところまで書いて、それをコントローラーで呼び出すってことでしょうか?
あれ? 確認ダイアログ出すんじゃなかったっけ。 その場合は、getImageで登録したらダメでないか?
このgetImageで行う処理は、取得した画像の解像度を合わせるくらいかな。 本当はbase64の変換したのをreturnにして、Domにマッピングしたいけど(登録する時にそっちの方が楽) 今は空でいいかな。
一旦、#35 で改修させてください。
下のコードでurlが出てきます。
(amazon apiのsecret keyをgitにpushするのは禁止なので、寿司にLINEで送ります)