お世話になっております。
kintoneに登録されている画像データを外部サイトで取得・表示させたいと考えていますが、うまくいきません。
pearのHTTP_Request2を使用してkintoneに接続しています。
以下ソースコードになります。
<?php
// HTTP_Request2
require_once 'HTTP/Request2.php';
// 認証設定
$subDomain = "subDomain";
$loginName = "loginName";
$password = "password";
// アプリID
$appId = 48;
//レコードID
$recordId = 3304;
/省略(filekeyの取得のために一度接続してレコード情報を取得)/
$fileKey = $data["record"]["添付ファイル"]["value"][0]["fileKey"];
// リクエストヘッダ
$header = array(
"Host: " . $subDomain . ".cybozu.com:443",
"Content-Type: application/json",
"X-Cybozu-Authorization: " . base64_encode($loginName . ':' . $password)
);
// リクエスト作成
unset ($request);
$request = new HTTP_Request2();
$request->setHeader($header);
$request->setUrl("https://" . $subDomain . ".cybozu.com/k/v1/file.json?fileKey=" . $fileKey);
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setBody(json_encode(array("app" => $appId, "id" => $recordId)));
$request->setConfig(array(
'ssl_verify_host' => false,
'ssl_verify_peer' => false
));
// レスポンス取得
$response = $request->send();
if ($response->getStatus() != "200") {
echo sprintf("status: %s\n", $response->getStatus());
echo sprintf("cybozu error: %s\n", $response->getHeader('x-cybozu-error'));
echo sprintf("body: \n%s\n", $response->getBody());
die;
}
$data = json_decode($response->getBody(), false);
echo $data;
?>
print_rで$responseの内容を見てみるとbodyにはなにかしらのデータが返ってきているのですが、json_decodeをすると中身がNULLになるという状況です。
bodyの中身は文字化けしていて何が入っているかは確認できません。
ご協力いただけると幸いです。
3件のコメント
Kohei Hasebe様
cstapの落合です。
json_decodeはJSONデータをデコードする関数です。
ファイルはJSONデータではないので、取得したデータをそのまま任意のファイルに書き込んで保存してみてください。
一番簡単な保存方法はこんな感じです。
$fp = fopen('test.png', 'w');
fwrite($fp, $response->getBody());
fclose($fp);
また、リクエストパラメータでの取得ですので、
$request->setBody(json_encode(array("app" => $appId, "id" => $recordId)));
は必要ないかと思います。
落合様
お世話になっております。
一撃必殺で解決できました!
ありがとうございます!
>また、リクエストパラメータでの取得ですので、
その通りでした。失礼いたしました。。。
Kohei Hasebe様
解決したようで良かったです!
また、何かありましたらお気軽にご質問ください(^^)