質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2422閲覧

XMLパーサー RSSで記事ごとにサイトタイトルを取得

ryoya1122

総合スコア16

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/06/08 03:01

編集2015/06/08 05:50

以下が現在のソースですが、これに追加で記事ごとにサイトのタイトルを追加する方法を考えています。
現在はitem属性内のアイテムしか取得してないため、サイトタイトルがchannel->titleのため、
自分ではうまく追記することできませんでした。

どの部分にどのような記述をすればいいか、助言をお願いします。

lang

1<?php 2header("Content-Type: text/html; charset=UTF-8"); 3//XML上部分作成 4$rssHeader = <<<RSS 5<?xml version="1.0" encoding="UTF-8"?> 6<rss version="2.0"> 7<channel> 8<title>サイトタイトル</title> 9<description>サイト概要</description> 10<link>サイトURL</link> 11<author>管理人</author> 12<pubDate>日付</pubDate> 13<language>ja</language> 14RSS; 15 16//フィード登録(例:サッカー関連2chまとめのRSSフィード) 17$data['feedurl'][] = 'http://alfalfalfa.com/index.rdf'; 18$data['feedurl'][] = 'http://news.2chblog.jp/index.rdf'; 19 20$rssList = $data['feedurl']; 21 22//同時呼び出し 23$rssdataRaw = multiRequest($rssList); 24 25$count = '0'; 26for($n=0; $n<count($rssdataRaw); $n++){ 27 //URL設定 28 $rssdata = simplexml_load_string($rssdataRaw[$n]); 29 30 if($rssdata->channel->item) $rssdata = $rssdata->channel; 31 32 if($rssdata->item){ 33 34 foreach($rssdata->item as $myEntry){ 35 36 37 38 //日付 39 $rssDate = $myEntry->pubDate; 40 if(!$rssDate) $rssDate = $myEntry->children("http://purl.org/dc/elements/1.1/")->date; 41 42 //管理人 43 $myAuther = $myEntry->children("http://purl.org/dc/elements/1.1/")->creator; 44 45 date_default_timezone_set('Asia/Tokyo'); 46 $myDateGNU = strtotime($rssDate); 47 $myDate = date('Y/m/d',$myDateGNU); 48 49 50 51 //タイトル 52 $myTitle = $myEntry->title; 53 $outdata[$myDateGNU]['myTitle'] = $myTitle; 54 55 //概要 56 $myDescription = $myEntry->description; 57 $outdata[$myDateGNU]['myDescription'] = $myDescription; 58 59 //リンクURL 60 $myLink = $myEntry->link; 61 $outdata[$myDateGNU]['myLink'] = $myLink; 62 63 //日付 64 $outdata[$myDateGNU]['rssDate'] = $rssDate; 65 66 //管理人 67 $outdata[$myDateGNU]['myAuther'] = $myAuther; 68 69 //ソート用 70 $outdata[$myDateGNU]['myDateGNU'] = $myDateGNU; 71 72 //出力内容(CSSOK) 73 if(preg_match('/PR:/',$myTitle)) continue; 74 75 } 76 } 77} 78 79$date = array(); 80foreach($outdata as $key => $row){ 81 $date[$key] = $row['myDateGNU']; 82} 83 84array_multisort($date, SORT_DESC, SORT_NUMERIC, $outdata); 85 86//記事情報取得 87 88$dataList = array(); 89$dataList = $outdata; //適当に記事データを取得する処理 90 91//XMLの記事部分作成 92$item = ""; 93foreach($dataList as $value){ 94 $item .= "<item>n"; 95 96 //概要 97 $itemDescription = $value['myDescription']; 98 $item .= "<description>" . $itemDescription . "</description>n"; 99 100 //リンク 101 $itemLink = $value['myLink']; 102 $item .= "<link>" . $itemLink . "</link>n"; 103 104 //管理人 105 $itemAuther = $value['myAuther']; 106 $item .= "<author>" . $itemAuther . "</author>n"; 107 108 //更新日付 109 $itemPubDate = $value['rssDate']; 110 $itemPubDate = date('m/d G:i', strtotime($itemPubDate)); 111 $item .= "<pubDate>$itemPubDate</pubDate>n"; 112 113 $item .= "</item>n"; 114 115} 116 117//XML下部分作成 118$rssFooter = <<<RSS 119</channel> 120</rss> 121RSS; 122 123//XML出力 124echo $rssHeader.$item.$rssFooter; 125 126//同時呼び出し関数 127function multiRequest($data, $options = array()) { 128 129 // array of curl handles 130 $curly = array(); 131 // data to be returned 132 $result = array(); 133 134 // multi handle 135 $mh = curl_multi_init(); 136 137 // loop through $data and create curl handles 138 // then add them to the multi-handle 139 foreach ($data as $id => $d) { 140 141 $curly[$id] = curl_init(); 142 143 $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d; 144 curl_setopt($curly[$id], CURLOPT_URL, $url); 145 curl_setopt($curly[$id], CURLOPT_HEADER, 0); 146 curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1); 147 148 // post? 149 if (is_array($d)) { 150 if (!empty($d['post'])) { 151 curl_setopt($curly[$id], CURLOPT_POST, 1); 152 curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']); 153 } 154 } 155 156 // extra options? 157 if (!empty($options)) { 158 curl_setopt_array($curly[$id], $options); 159 } 160 161 curl_multi_add_handle($mh, $curly[$id]); 162 } 163 164 // execute the handles 165 $running = null; 166 do { 167 curl_multi_exec($mh, $running); 168 } while($running > 0); 169 170 // get content and remove handles 171 foreach($curly as $id => $c) { 172 $result[$id] = curl_multi_getcontent($c); 173 curl_multi_remove_handle($mh, $c); 174 } 175 176 // all done 177 curl_multi_close($mh); 178 179 return $result; 180} 181 182?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ngyuki

2015/06/08 04:18

teratail は質問や回答を markdown 形式で書くことができるようになっており、コードのシンタックスハイライトも可能です。 シンタックスハイライトは以下のような形式で可能です(恐らくこのコメントはシンタックスハイライトはされませんが)。 ```lang-php <?php // 個々にコードを書く ``` このように書くことで質問が見やすくなるため、回答もつきやすくなるでしょう。
ngyuki

2015/06/08 04:20

ああ、改行が無くなって何書いているかわからなくなってしまったので、代わりに https://teratail.com/help この辺を見るといいでしょう
ryoya1122

2015/06/08 05:51

ありがとうございました。指摘とおり編集しました。
guest

回答1

0

$rssdata が XML のルート要素になっているので、サイトのタイトル(channel/title)は、

lang

1$rssdata->channel->title

です。

投稿2015/06/08 06:09

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問