前提・実現したいこと
アンテナサイトなどのデイリーランキングなどの日毎変わる動画URLを自動で取得したい。
発生している問題・エラーメッセージ
コードを公開しているサイトがあったのですが、その通りにやってもできないので解決できずこちらに質問させていただきました。
MIXHOSTのCORNジョブに設定しても実行されていない。
該当のソースコード
//【実行トリガー】これをCORNに設定します。
PHP
1$scrape_url_list = array( //配列でURLを送ると並列処理されます 2 htmlspecialchars_decode( 'スクレイピング対象URL①' ), 3 htmlspecialchars_decode( 'スクレイピング対象URL②' ), 4 htmlspecialchars_decode( 'スクレイピング対象URL③' ) 5); 6$seikihyougen = "正規表現パターン"; 7$scrape_content = scraping_content($scrape_url_list, $seikihyougen);
【function.php】
function scraping_content($scrape_url_list, $seikihyougen){ $scrape_content = array (); $TIMEOUT = 40; $mh = curl_multi_init(); foreach ($scrape_url_list as $u) { $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => $u, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => $TIMEOUT, CURLOPT_CONNECTTIMEOUT => $TIMEOUT, //CURLOPT_PROXYPORT => "プロキシのポート", //CURLOPT_PROXY => "プロキシ", //CURLOPT_PROXYUSERPWD => "プロキシのパスワード", )); curl_multi_add_handle($mh, $ch); } do { $stat = curl_multi_exec($mh, $running); } while ($stat === CURLM_CALL_MULTI_PERFORM); if ( ! $running || $stat !== CURLM_OK) { throw new RuntimeException('リクエストの開始不可、URLの設定を確認'); } do switch (curl_multi_select($mh, $TIMEOUT)) { case -1: //selectに失敗 usleep(5); do { $stat = curl_multi_exec($mh, $running); } while ($stat === CURLM_CALL_MULTI_PERFORM); continue 2; case 0: //タイムアウト continue 2; default: //どれかが成功 or 失敗した do { $stat = curl_multi_exec($mh, $running); } while ($stat === CURLM_CALL_MULTI_PERFORM); do if ($raised = curl_multi_info_read($mh, $remains)) { $info = curl_getinfo($raised['handle']); echo "$info[url]: $info[http_code]: $info[total_time]\n"; $response = curl_multi_getcontent($raised['handle']); if ($response === false) { echo 'ERROR!!!', PHP_EOL; } else { $pattern = "$seikihyougen"; $match = array(); preg_match_all($pattern, $response, $match, PREG_SET_ORDER); $count = count($match); for ($j = 0; $j< $count; $j++) { $hinban = $match[$j][1]; array_push($scrape_content, $match[$j]); } // for $j } curl_multi_remove_handle($mh, $raised['handle']); curl_close($raised['handle']); } while ($remains); } while ($running); echo 'finished', PHP_EOL; curl_multi_close($mh); return $scrape_content; }
試したこと
URLのところに持ってきたい動画ページのURLを入れるみたいなのですが、それだと動画ページ毎にURLを貼り付けなくてはいけないので「自動」ではないと思います。ただ、試しに動画ページURLを入れてみたのですが、メールが届いていないので実行されていないのだと思います。このコードに何か足りないところや、このコードでは実現したいことはできない。などがありましたら教えてもらえないでしょうか?
補足情報(FW/ツールのバージョンなど)
MIXHOSTでwordpressの中での話です。
phpに関しては関数を覚えたて程度の知識しかありません。よろしくお願いします。
あなたの回答
tips
プレビュー