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) "勉強したことのメモ。" }
関連記事
-
-
MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法
先日PHPで画像を比較して類似度を算出する「image-comparator」ラ ...
-
-
MySQLのREGEXPで半角記号を検索したい場合の対応方法
MySQLのREGEXPで半角記号を検索したい場合\\を付けてエスケープしないと ...
-
-
smart_resize_imageで縦横の比率関係なく、固定リサイズ
PHPで縦横どちらかが指定の長さを超えた場合、比率を保ったままリサイズで使ったs ...
-
-
地理院のジオコーディングAPIをPHPからリクエストする方法
以前に地理院のジオコーディングAPIをjavascriptからajaxでリクエス ...
-
-
PHPで画像のフォーマット(拡張子)の変換
画像のアップロードでjpg/png/gif形式を受け付けつつ、 最終的にjpgで ...