勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでサイトURLからtitleとRSS用URLを取得

   2024/04/17  PHP

サイトの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

  関連記事

PHPにてhosts設定を行った上で他サイト・サーバにアクセスする方法

開発中の案件だとhosts設定を行ってサーバにアクセスする、ということがある。作 ...

PHPで配列に特定の値が入っているか検索

PHPで配列に特定の値が入っているか検索して trueかfalseを返したい、と ...

PHPでURLを解析してクエリ(GETパラメータ)を抽出する方法

formからGETで送信したクエリ(パラメータ)を、受信した側で抽出し、キーと値 ...

PHPで他サーバにFTP経由にてファイルをアップロードする方法

formで送信した内容をチェックした上で、他サーバにファイルをアップロードしたか ...

Codeigniter3で外部ファイル(CSS / JS)の読み込みと共通パーツ化する方法

CodeigniterでCSSやJSファイル等の外部ファイル読み込みたかった。ま ...