勉強したことのメモ

webプログラマが勉強したことのメモ。

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

   

サイトの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とStripeで定額課金(サブスクリプション)実装

PHPとStripeで1ヶ月ごとに500円でサイト内のサービスを使い放題のような ...

日付と時間のピッカー

ここだとbootstrap使用だけど、他に良さそうなものがあったのでメモ。 ■参 ...

var_export

PHPのソースでvar_exportという見慣れない関数があった。 Aファイルか ...

Fatal error: [] operator not supported for stringsの対処

Fatal error: [] operator not supported f ...

PHPでファイルを添付してメール送信

PHPでファイルを添付の上、メールを送信したかった。方法を探したところphpma ...

さくらvpsでPHPのエラーログ設定

PHPのエラーログを設定した際のメモ。 vi /etc/php.ini で設定フ ...

画像削除用function

ファイルパス、拡張子、seq番号、画像番号を渡してあげるだけ。 拡張子部分があれ ...

PHPで他サーバにファイルをアップロードする2

formで画像を送信した後、他サーバにファイルをアップロードしたかった。以前はP ...

短縮URL(リダイレクトページ)

<? /* 管理画面とあわせて使う。 short_url直下にこのphpを ...

PHPでファイルをダウンロードさせる

集計ページみたいなんがあった。その集計ページを CSV化したいと言われた。 ■ソ ...