LINE Messaging API | Webプログラミング!(2021年度)

Time-stamp: "2018-11-29 Thu 12:44 JST hig"

予備知識

Codeanywhere における Goutte.php の準備

  1. 以下は趣味のよいディレクトリ配置ではありませんが, この場合には危険はなく, 動きます.
  2. SSH Terminal を開き, 以下を実行します. (/usr/local/bin/composer がインストール済みのはず)
    cd /home/cabox/workspace
    mkdir gproj # 好きなディレクトリ名を決める
    cd /home/cabox/workspace/gproj
    composer require fabpot/goutte # composer による goutte のインストール
    mkdir /home/cabox/workspace/gproj/public # 公開用ディレクトリを作る
    	
  3. /home/cabox/workspace/gproj/public 内に(例えば) scrape-sample.php を作ります.
  4. https://www.akb48.co.jp/about/members/を「ソースを表示」してプログラムと比較しましょう.
  5. Webhook としては https://ホスト名.codeanywhere.com/gproj/public/scrape-sample.php を指定することになります.
サンプル1

parrot_delayed.php


     <?php
require_once("../vendor/autoload.php");
require_once("lineconfig.php");

$received_data = json_decode(file_get_contents('php://input'),TRUE);
$replyToken = $received_data["events"][0]["replyToken"];
$sender_lineid= $received_data["events"][0]["source"]["userId"];
$received_text=$received_data["events"][0]["message"]["text"];
error_log("receved_data: ".print_r($received_data,TRUE));
error_log("sender_lineid: ".$sender_lineid);


$url='https://www.akb48.co.jp/about/members/';

try{
$client= new Goutte\Client();
$crawler=$client->request('GET',$url);

$k=array();
$v=array();

$crawler->filter('h4.memberListNamej')->each(function($member){global $k; $k[]=( $member->text());echo($member->text());});
$crawler->filter('h5.memberListBirthDay')->each(function($member){global $v; $v[]=( $member->text());echo($member->text());});
//print_r($k);
//print_r($v);
$birthdaydict=array_combine($k,$v);
//print_r($birthdaydict);
} catch(Exception $e){
    echo("Exception::".$e->getMessage() . $e->getFile() . $e->getLine());
}

$message_text="$received_text : そんなメンバーいないよ〜"; 
foreach($birthdaydict as $key=>$value){
    if( preg_match('/'.$received_text.'/u',$key)){
        $message_text=$key .":" . $value;
        break;
    }
}

$messageData = [[
    'type' => 'text',
    'text' => $message_text
]];

sendMessage($replyToken,$messageData);




function sendMessage($replyToken,$messageData){
    global $accessToken;

    $post_data=json_encode(['replyToken' => $replyToken, 'messages' => $messageData]);

    $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, $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);
    error_log("posr_data:" . print_r($post_data,TRUE));
    error_log("ret:". print_r($result,TRUE));
    return $result;
}

// Local Variables:
// mode:php
// End:
     

課題

参考

このサイトのコンテンツ

QRcode to hig3.net

https://hig3.net