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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

RSS

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

Android

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

XMLパーサ

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

Q&A

0回答

2281閲覧

RSS バース処理、サイトタイトル Android

ryoya1122

総合スコア16

XML

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

RSS

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

Android

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

XMLパーサ

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

0グッド

0クリップ

投稿2015/06/05 16:42

編集2015/06/06 06:05

https://teratail.com/questions/10711

↑の質問のようにAndroidのRSSリーダーを作っていますが、サイトタイトルがうまく抽出できません。

まず、今あるソースコードからサイトタイトルを抜きだすようにする方法が思いつきません。

バース処理の仕組みがよく理解できていません。
自分の今のところの理解では、1行ごとにタグを見て該当するタグのみを抽出していく、といった感じですが、

そもそもtitleタグってサイトのタイトルにも記事のタイトルにもあるのでは・・・

そしてそれをAndroid側でどう処理するか・・・

何が質問かめちゃくちゃですが、完全に行き詰っている今の状況を打開する方法を教えてください。

自分はphpに関してはほとんど知識がないので、そっち重点的に教えていただけると助かります。

追記

リンク貼ってあったURLを自分なりに編集してみましたが、エラーは吐かなかったものの、SiteTitleタグ内には何も入りませんでした。

<?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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問