Steamer Lane Studio技術備忘録ユーティリティ

指定のページの指定のclass内を別のサイトのページに取り込むPHPコード

utility 指定のページの指定のclass内を別のサイトのページに取り込むPHPコード
作成日: 2023年9月27日

昔PHPが5x頃にかなり複雑なものを作ったが、改めて必要が出たのでPHP8.1対応で作ってみた。
スクレイピングの初歩、簡易的な部分抜き出しってことで。
コンテンツのコピーはSEO上よろしくないが、別ドメインでも同じ所有者だとか、本サイトとサテライトサイトといった関係性なら「コピーコンテンツ」と判定されることはまずないと、いうことなので使用を誤らなければコンテンツの2重投稿などの手間を減らせることになる。
以前はMovableTypeベースで親に投稿都度子にもページからできて、sitemapから全部賄うものを作ったが、今回は単純に指定ページの指定クラス内を取り込むだけなので、拡張子がphpなら何でも利用可能。

<?php$00A0$url = "https://ページ指定";
$html = file_get_contents($url);

// '</a>>' を '</a>' に置換・・・これは作った際の対象ページがそうだったのだが何故かaの閉じタグ浴後に>(全角なら良かったが)が付与されていてそのままではエラーになるので全ソースコードをを整形。必要があれば、必要なものを残すという処理前にこうした処理をする。。$html = preg_replace('/<\/a>>/s', '</a>', $html);

function keepOnlySelectedTags($html, $tagName, $class) {
$pattern = "/<{$tagName}[^>]*class=\"{$class}\"[^>]*>(.*?)<\/{$tagName}>/s";
preg_match_all($pattern, $html, $matches);
return implode('', $matches[0]);
}

$tagName = 'ul'; // htmlタグ指定今回はul

$class = 'link_list'; // クラスを指定

$cleanedHtml = keepOnlySelectedTags($html, $tagName, $class);

echo $cleanedHtml;
?>

今回はul.link_list以外を削除して取り込むって内容。
あまり使わないけど、複数サイトを管理するWEBマスターなんかには便利かな。