/** * 動画のURLを取得する * * @param simple_html_dom $html * @return array **/ public function getMoviesUrl($html) { $query = 'div.article-body-inner div.article-body-more'; $more_el = $html->find($query, 0); $movie_data = array(); $manager = new UriManager(); // 子供要素を持っていなければならない if (!$more_el->hasChildNodes()) { return $movie_data; } $child_els = $more_el->childNodes(); foreach ($child_els as $child_el) { // scriptタグであった場合 if ($child_el->tag == 'script') { // 主にFC2動画をembedしている場合 if ($child_el->hasAttribute('url')) { $movie_url = $child_el->getAttribute('url'); $movie_data[] = $manager->resolve($movie_url); continue; } // 主にasg.toの動画をembedしている場合 if ($child_el->hasAttribute('src') && $child_el->getAttribute('src') == 'http://asg.to/js/past_uraui.js') { // 次のスクリプト要素内にある関数に与えているmcd値を取得する // e.g. Purauifla("mcd=lNl25A52tkqoweP2", 450, 372); --> lNl25A52tkqoweP2 $next_el = $child_el->nextSibling(); $pattern = '/Purauifla\\("mcd=([0-9a-zA-Z]+)", [0-9]+, [0-9]+\\);/'; preg_match($pattern, $next_el->innertext, $matches); if (!isset($matches[1])) { continue; } $movie_url = 'http://asg.to?mcd=' . $matches[1]; $movie_data[] = $manager->resolve($movie_url); } } // iframeタグであった場合 if ($child_el->tag == 'a') { $url = $child_el->getAttribute('href'); if (!$manager->isXvideosUrl($url)) { continue; } $movie_data[] = $manager->resolve($url); } } return $movie_data; }