読者です 読者をやめる 読者になる 読者になる

ど忘れSEの備忘録

日々集めた何かしらを残すための何か。 共有とか疑問解決とかできたらいいな。 iPhoneとかiOSとかその他スクリプトとか色々。

phpで特定のサイトから文字列を引っこ抜きたい

ラズパイさんで毎朝7時に天気を読み上げ&ツイートする機能を実装したので、折角だから他に何かツイートさせたいなぁと思い、今日やってる東京のグルメイベントとかつぶやいたらいいんじゃねって思い立った。
ただhtmlのパースがめんどくさくてしゃあない…。

pythonとか使った方がいいのかなぁと思いつつ、とりあえずYahooから情報引っこ抜けるようになったのでmemo。

<?php
$today = date('Ymd')."\n";
$url = "https://loco.yahoo.co.jp/tokyo/event/8011001/?date=".$today;

$html = file_get_contents($url);
$html = mb_convert_encoding($html, mb_internal_encoding(), "auto" );
$html = preg_replace('/\n|\r|\r\n/', '', $html);

// タイトルの取得取得
preg_match( "/<title>(.*?)<\/title>/u", $html, $title);
$txt =  substr($title[1], 0, -15)."\n\n";

// イベント部分の取得
preg_match( "/<ul class=\"list\">(.*?)<\/ul>/u", $html, $list);
// 開催中の文字列削除
$eventlist = str_replace('開催中', '', $list[1]);
// 配列化する為開始タグの前に半角スペース挿入
$eventlist = str_replace('<', ' <', $eventlist);
// []で囲まれた文字列削除
$eventlist = preg_replace( '/\[(.*?)\]/u', '', $eventlist);
// 文字列内のhtmlタグ削除
$eventlist = strip_tags($eventlist);
// スペースで区切られた文字列を配列に
$eventlists = explode(" ", $eventlist);
// 空の配列を削除(添え字は飛び飛び)
$eventlists = array_filter($eventlists, "strlen");
// 配列の添え字を振り直し
$eventlists = array_values($eventlists);
//$txt .= $eventlist."\n\n";
foreach ($eventlists as $id => $rec) {
  if ($id % 3 == 2) {
      $txt .= $rec."\n\n";
  } else {
      $txt .= $rec."\n";
  }
}

$txt .= "詳細は以下リンクを参照。"."\n";
$txt .= $url;

echo $txt;

でももっとスマートな方法があるんだろうなぁと思いつつ、そのうちでいいやという諦め。

そしてこの方法だとあっさり140字を超えやがるので、先頭1件だけにすべきかも…。