そこで、 xmlstarlet を xml パーサーとして使用し、wget を rss ダウンローダーとして使用して、bashで rssスクレーパーを作成します (wget の部分は完了したので、質問はありません)。それをフィードし、次の形式で保存します:$ {channel}など(echo -e形式で保存しました(つまり、stdoutとして表示します)。フィード内の各アイテムを次のように解析したいと思いますXMLStarlet をダウンロードして、${channel} などの形式で保存します)。要するに、C# で次のようなことを行います。
//ignore the classes, they're just illustrations
public class RSSClass
{
public string Title { get; set; } //definition
public string PubDate { get; set; }
}
void myRSS_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
var rssData = from rss in XElement.Parse(e.Result).Descendants("item")
select new RSSClass
{
Title = rss.Element("title").Value, //this stores the value in <title/> in the respective string named Title
PubDate = rss.Element("pubDate").Value //this is also done the same thing
};
}
そして、bashが何であるかわからないので、bashで同じことを行う方法がわかりません(私はbashが本当に初めてです)
更新:私はbashである種のセケレトンコードを書きました(ただし、bash xmlの解析はまだわかりませんでした):
#!/bin/bash
RSS_URI="http://rss.detik.com/index.php/hot"
XPATH_MATCH=/rss/channel/item
XPATH_VALUE="concat(pubDate,' | ',title,'\n')"
RSS_DATA="data.xml"
${channel}
${pubdate}
${title}
${link}
DOWNLOAD_AND_PARSE () #Downloads and parses RSS [SKELETON]
{
wget -O RSS_DATA RSS_URI
echo -e "$(~/bin/xml sel --net -t -m "$XPATH_MATCH" -v "$XPATH_VALUE" "$RSS_DATA")" | awk -F "|" '{print $1 $2}'
}
後はどうすればいいのかわからない :|
あなたの解決策/回答/などを前もって感謝します
編集:出力を分離する方法を最近見つけたばかりですが、${} 形式で保存する方法についてはまだ問題があります