[目次]
LINE Messaging API | Webプログラミング!(2021年度)
予備知識
- CSS
- Scraping
- Goutte
Codeanywhere における Goutte.php の準備
- 以下は趣味のよいディレクトリ配置ではありませんが, この場合には危険はなく, 動きます.
- 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 # 公開用ディレクトリを作る
- /home/cabox/workspace/gproj/public 内に(例えば) scrape-sample.php を作ります.
- https://www.akb48.co.jp/about/members/を「ソースを表示」してプログラムと比較しましょう.
- Webhook としては https://ホスト名.codeanywhere.com/gproj/public/scrape-sample.php を指定することになります.
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: