LINE Bot で 画像を受信してみる。

以前、LINE Bot で 画像の送信をしました。今度は受信をしてみます。

↓リファレンスを見ると、取得した messageId をキーにしてバイナリを取得するようです。

GET https://api.line.me/v2/bot/message/{messageId}/content

$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);

$replyToken = $jsonObj->{"events"}[0]->{"replyToken"};
$messageId = $jsonObj->{"events"}[0]->{"message"}->{"id"};

//画像ファイルのバイナリ取得
$ch = curl_init("https://api.line.me/v2/bot/message/".$messageId."/content");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-Type: application/json; charser=UTF-8',
 'Authorization: Bearer ' . $accessToken
 ));
$result = curl_exec($ch);
curl_close($ch);

//画像ファイルの作成  
$fp = fopen('./img/test.jpg', 'wb');

if ($fp){
    if (flock($fp, LOCK_EX)){
        if (fwrite($fp,  $result ) === FALSE){
            print('ファイル書き込みに失敗しました<br>');
        }else{
            print($data.'をファイルに書き込みました<br>');
        }

        flock($fp, LOCK_UN);
    }else{
        print('ファイルロックに失敗しました<br>');
    }
}

fclose($fp);

//そのまま画像をオウム返しで送信  
 $response_format_text = [
 "type" => "image",
 "originalContentUrl" => "【画像ファイルのパス】/img/test.jpg",
 "previewImageUrl" => "【画像ファイルのパス】/img/test.jpg"
 ];

$post_data = [
"replyToken" => $replyToken,
"messages" => [$response_format_text]
];
 
$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-Type: application/json; charser=UTF-8',
 'Authorization: Bearer ' . $accessToken
 ));
$result = curl_exec($ch);
curl_close($ch);