ホームページにブロガー(Blogger)の記事を表示させようと思い、素人なりに検索して作ってみました。
<!DOCTYPE html> <head> <!-- RSS --> <script src="https://code.jquery.com/jquery-3.0.0.js"></script> <script src="https://code.jquery.com/jquery-migrate-3.0.0.js"></script> <script src="/feed.js"></script> <!-- /RSS --> </head> <body> <dl id="feed" data-feed-url="https://[ブロガーのID].blogspot.jp/feeds/posts/default/-/[表示させるラベル]" data-feed-count="5"> </dl> </body> </html>しかし、リンクがおかしくなってしまい、記事タイトルをクリックしても正しくブロガー(Blogger)の記事にとびません。
どこをなおせば正しくリンクされますでしょうか?
ブロガー(Blogger)に詳しい方教えてください。
JS、PHPは以下の通りです。
↓↓↓JS (feed.js)↓↓↓
jQuery(function ($) {
var $feedElement = $('#feed'),
feedUrl = $feedElement.data('feedUrl'),
feedCount = $feedElement.data('feedCount');
// フィードの取得
$.ajax('/feed.php', {
type: 'POST',
dataType : 'json',
async: true,
processData: true,
timeout: 10000,
data: {url: feedUrl}
})
.done(function (data) {
var html = '';
// 取得した投稿データごとに繰り返す
for (var i = 0; i < data.length; i++) {
var entry = data[i];
// 投稿日
var pubDate = new Date(entry.published);
html += '<tr><td>' + pubDate.getFullYear() + '/' + ('0' + (pubDate.getMonth() + 1)).slice(-2) + '/' + ('0' + pubDate.getDate()).slice(-2) + '</td><td width="10"></td>';
// タイトル、リンク
html += '<td><a href="' + entry.link + '">' + entry.title + '</a></td></tr>';
if (!(--feedCount)) {
break;
}
}
$feedElement.html(html);
});
});
↓↓↓PHP (feed.php)↓↓↓
<?php class AjaxFeed { protected $feed = null; public function __construct() { // フィード取得 $this->feed = $this->getFeed($_POST['url']); $result = $this->parseFeed(); // JSONで返す $this->sendJson($result); } protected function getFeed($url) { // フィードを取得する $res = file_get_contents($url, false, stream_context_create($this->buildOptions())); // オブジェクトに変換する // CDATAを取得できるようにLIBXML_NOCDATAを指定する $feedData = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA); return $feedData; } protected function buildOptions() { $options = array( 'http' => array( 'method' => 'GET', 'header' => implode("\r\n", array( 'Content-Type: application/x-www-form-urlencoded' )) ) ); return $options; } protected function parseFeed() { $items = $this->getItems(); // 値を取得 // 配列として返す $entries = array(); foreach ($items as $item) { $entries[] = get_object_vars($item); } return $entries; } protected function getItems() { $name = $this->feed->getName(); switch ($name) { case 'RDF': // RDF $items = $this->feed->item; break; case 'rss': // RSS2.0 $items = $this->feed->channel->item; break; case 'feed': // Atom $items = $this->feed->entry; break; default: $items = array(); break; } return $items; } protected function sendJson($data = array()) { header('Content-Type: application/json; charset=UTF-8'); // JSON形式 header('X-Content-Type-Options: nosniff'); // IEがContent-Typeヘッダーを無視してコンテンツの内容を解析するのを防ぐ echo json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); // エスケープしてJSONで出力する exit; } } new AjaxFeed();回答1件
あなたの回答
tips
プレビュー