PHPでサイトURLからtitleとRSS用URLを取得
2024/04/17
サイトのURLからRSS用URLとサイトタイトルを自動で取得したかった。その方法のメモ。
ソースコード
<?php
function findFeedUrl( $url ){
if ( !$url ) return false;
$html = file_get_contents($url);
if( !$html ) return false;
$title = (preg_match('/<title>(.*?)<\/title>/i', mb_convert_encoding($html, 'UTF-8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS'), $result)) ? $result[1] : '';
preg_match_all('/<link\s+(.*?)\s*\/?>/is', $html, $matches);
$links = $matches[1];
$finalLinks = array();
foreach ($links as $idx=>$link) {
$attributes = preg_split('/\s+/s', $link);
foreach ($attributes as $attribute) {
$att = preg_split('/\s*=\s*/s', $attribute, 2);
if(isset($att[1])) {
$att[1] = preg_replace('/([\'"]?)(.*)\1/', '$2', $att[1]);
$finalLink[strtolower($att[0])] = $att[1];
}
}
$finalLinks[$idx] = $finalLink;
}
$href = null;
foreach ($finalLinks as $finalLink) {
if (!array_key_exists('type', $finalLink)) {
continue;
}
switch (strtolower($finalLink['type'])) {
case 'application/x.atom+xml':
case 'application/atom+xml':
case 'application/xml':
case 'text/xml':
case 'application/rss+xml':
case 'application/rdf+xml':
if (array_key_exists('href', $finalLink)) {
$href = $finalLink['href'];
}
break;
default:
break;
}
if ($href) {
if (strstr($href, 'http://') !== false) {
$fullUrl = $href;
} else {
$urlParts = parse_url($url);
$fullUrl = "http://{$urlParts['host']}";
if (isset($urlParts['port'])) {
$fullUrl .= ":{$urlParts['port']}";
}
if ($href{0} != '/'){
if (isset($urlParts['path'])) {
$fullUrl .= dirname($urlParts['path']);
}
if (substr($fullUrl, -1) != '/') {
$fullUrl .= '/';
}
}
$fullUrl .= $href;
}
return array($fullUrl, $title);
}
}
return false;
}
var_dump(findFeedUrl('https://taitan916.info/blog/')); //array(2) { [0]=> string(37) "https://taitan916.info/blog/?feed=rss2" [1]=> string(30) "勉強したことのメモ。" }
関連記事
-
-
PHPで画像を分割し並べ替えて出力したものをJavaScriptで復元する方法
ある電子書籍サイトをブラウザの開発者ツールで見てみたところ、PHPでページ画像を ...
-
-
PHPのZipArchive::addFileでファイルが追加できない場合の対応方法
過去記事を参考にPHPにて複数のファイルをzipファイル化後、ダウンロードさせた ...
-
-
【2025年版】PHPとStripeを用いてサイト内にクレカ決済及びキャンセル機能を実装する方法
5年ほど前にPHPとStripeを用いたクレカ決済機能をテスト実装したが最近試し ...
-
-
PHPでデータをファイルキャッシュさせる(Cache_Lite)
最近携わった案件でPHPでファイルキャッシュをしているシステムがあった。今までフ ...
-
-
PHPで「operator not supported for strings」エラーの対応方法
PHPにて「Fatal error: [] operator not suppo ...