勉強したことのメモ

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

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

  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からDBX Platformを利用してサーバ内のファイルをアップロードする方法

PHPで何らかのファイルを保存するようなケースだと今まではローカルに保存する、も ...

PHPでcharset

header("Content-Type: text/html; charset ...

$_SERVER['PHP_SELF']に脆弱性あり

formのaction属性とかページングのリンクとかで、 <form ac ...

PHPでファイルパスorフォルダパスの確認

PHPで画像とか触る際にフォルダのパス、ファイルのパスを 知りたいことがあったの ...

CodeIgniter4の各種設定項目のまとめ記事

CodeIgniter4.4.4の各種設定項目を後から確認できるようまとめておき ...