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

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

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

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

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

XMLパーサ

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

PHP

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

Q&A

1回答

2698閲覧

php RSSをXMLバース処理

ryoya1122

総合スコア16

XML

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

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

XMLパーサ

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

PHP

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

0グッド

0クリップ

投稿2015/06/06 06:16

phpでRSSをまとめて出力するためにXMLバーサを作っています。

AndroidでのRSSリーダーで使用するもので当方phpの知識はほとんどありません。

もともとのソースコードではサイトのタイトルを取得することができず、自分なりに[siteTitle]というタグ名でサイトのタイトルを取得しようとしてみましたが、エラーは吐かないもののsiteTitleタグ内は空になっていました。

まずこちらが元のソースコードです。

どうすればChannelの子要素のtitleを取得できるか、ご教授願います。

文字数の都合のため編集前のソースコードはこちらをご覧ください。
http://18free.16mb.com/before.txt


こちらが編集後のソースコードです

<?php header("Content-Type: text/html; charset=UTF-8"); //XML上部分作成 $rssHeader = <<<RSS <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>サイトタイトル</title> <description>サイト概要</description> <link>サイトURL</link> <author>管理人</author> <pubDate>日付</pubDate> <language>ja</language> RSS;

//フィード登録(例:サッカー関連2chまとめのRSSフィード)
$data['feedurl'][] = 'http://alfalfalfa.com/index.rdf';
$data['feedurl'][] = 'http://news.2chblog.jp/index.rdf';

$rssList = $data['feedurl'];

//同時呼び出し
$rssdataRaw = multiRequest($rssList);

$count = '0';
for($n=0; $n<count($rssdataRaw); $n++){
//URL設定
$rssdata = simplexml_load_string($rssdataRaw[$n]);

if($rssdata->channel->item) $rssdata = $rssdata->channel; if($rssdata->item){ foreach($rssdata->item as $myEntry){ -----ここから編集部------ $sitetitle = $myEntry->channel->title; $outdata[myDateGNU]['siteTitle'] = $sitetitle; ------ここまで編集部------ //日付 $rssDate = $myEntry->pubDate; if(!$rssDate) $rssDate = $myEntry->children("http://purl.org/dc/elements/1.1/")->date; //管理人 $myAuther = $myEntry->children("http://purl.org/dc/elements/1.1/")->creator; date_default_timezone_set('Asia/Tokyo'); $myDateGNU = strtotime($rssDate); $myDate = date('Y/m/d',$myDateGNU); //タイトル $myTitle = $myEntry->title; $outdata[$myDateGNU]['myTitle'] = $myTitle; //概要 $myDescription = $myEntry->description; $outdata[$myDateGNU]['myDescription'] = $myDescription; //リンクURL $myLink = $myEntry->link; $outdata[$myDateGNU]['myLink'] = $myLink; //日付 $outdata[$myDateGNU]['rssDate'] = $rssDate; //管理人 $outdata[$myDateGNU]['myAuther'] = $myAuther; //ソート用 $outdata[$myDateGNU]['myDateGNU'] = $myDateGNU; //出力内容(CSSOK) if(preg_match('/PR:/',$myTitle)) continue; } }

}

$date = array();
foreach($outdata as $key => $row){
$date[$key] = $row['myDateGNU'];
}

array_multisort($date, SORT_DESC, SORT_NUMERIC, $outdata);

//記事情報取得

$dataList = array();
$dataList = $outdata; //適当に記事データを取得する処理

//XMLの記事部分作成
$item = "";
foreach($dataList as $value){
$item .= "<item>n";
--------ここから編集部--------
$itemSitetitle = $value['siteTitle'];
$item .= "<siteTitle>" . $itemSitetitle . "</siteTitle>n";
--------ここまで編集部-----------
//タイトル
$itemTitle = $value['myTitle'];
$item .= "<title>" . $itemTitle . "</title>n";

//概要 $itemDescription = $value['myDescription']; $item .= "<description>" . $itemDescription . "</description>n"; //リンク $itemLink = $value['myLink']; $item .= "<link>" . $itemLink . "</link>n"; //管理人 $itemAuther = $value['myAuther']; $item .= "<author>" . $itemAuther . "</author>n"; //更新日付 $itemPubDate = $value['rssDate']; $itemPubDate = date('m/d G:i', strtotime($itemPubDate)); $item .= "<pubDate>$itemPubDate</pubDate>n"; $item .= "</item>n";

}

//XML下部分作成
$rssFooter = <<<RSS
</channel>
</rss>
RSS;

//XML出力
echo $rssHeader.$item.$rssFooter;

//同時呼び出し関数
function multiRequest($data, $options = array()) {

// array of curl handles
$curly = array();
// data to be returned
$result = array();

// multi handle
$mh = curl_multi_init();

// loop through $data and create curl handles
// then add them to the multi-handle
foreach ($data as $id => $d) {

$curly[$id] = curl_init(); $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d; curl_setopt($curly[$id], CURLOPT_URL, $url); curl_setopt($curly[$id], CURLOPT_HEADER, 0); curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1); // post? if (is_array($d)) { if (!empty($d['post'])) { curl_setopt($curly[$id], CURLOPT_POST, 1); curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']); } } // extra options? if (!empty($options)) { curl_setopt_array($curly[$id], $options); } curl_multi_add_handle($mh, $curly[$id]);

}

// execute the handles
$running = null;
do {
curl_multi_exec($mh, $running);
} while($running > 0);

// get content and remove handles
foreach($curly as $id => $c) {
$result[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($mh, $c);
}

// all done
curl_multi_close($mh);

return $result;
}

?>

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

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

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

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

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

guest

回答1

0

ソースが長い&よく質問が理解出来なかったですが、

xmlのデータのたり出し方が分からないと言う事でしょうか??

違ったらすみませんm(_ _)m

単にデータの取り出し方がいまいち分からないと言うのであれば、xmlを構造化して見るといいでしょう。

lang

1print_r(Object);

この関数でオブジェクトを構造化して出力してくれるので、それを参考にデータにアクセスするといいでしょう。

投稿2015/06/06 06:37

fukumi822

総合スコア228

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問