我正在尝试从 RSS 提要中检索数据(继这部分之后),然后使用描述、标题和标题来使用 YQL Placemaker 开放数据表获取地理信息(纬度、经度、woeId)。
这一切都需要以 JSON 格式输出。
在 YQL 控制台中测试它的固定链接在这里。
任何想法我的 xml 代码有什么问题或者我应该尝试什么?
<meta>
<author>Yahoo! Inc.</author>
<documentationURL>http://i-magine.mobi/</documentationURL>
<sampleQuery>select * from {table} where section="topstories" and description matches ".*jpg.*"</sampleQuery>
<description>Searches Yahoo.news RSS</description>
</meta>
<bindings>
<select itemPath="" produces="XML">
<urls>
<url>http://rss.news.yahoo.com/rss/topstories/{section}
</url>
</urls>
<inputs>
<key id='section' type="xs:string" paramType="path" required="true" />
</inputs>
<execute><![CDATA[
default xml namespace = "http://where.yahooapis.com/v1/schema.rng";
// http://www.json.org/json2.js
y.include('http://www.i-magine.mobi/json2.js');
rssStorySection = [];
rssStoryNumber = [];
rssStoryTitle = [];
rssStorySummary = [];
rssImageCaption = [];
rssStoryUrl = [];
rssImageUrl = [];
rssGeoText = [];
// var content = 'They followed him to deepest Africa after Brussels and Tokyo and found him there in Timbuktu';
var rssQuery = 'select * from rss where url = ' + "'" + 'http://rss.news.yahoo.com/rss/' + section + "'" + ' and description matches ".*jpg.*" limit 30';
res1 = y.query(rssQuery);
data1 = res1.results;
// var geoQuery = 'SELECT * FROM geo.placemaker WHERE documentContent =' + '"' + content + '"' + 'AND documentType=' + '"' + 'text/plain' + '"';
// res2 = y.query(geoQuery);
// data2 = res2.results;
for (var c=0;c<data1.item.length;c++)
{
var story = data1.item[c];
var storyTitleText0 = story.title + "";
var storyUrl = story.link + "";
var description = story.description;
var storyTitleText = storyTitleText0.replace(/\n/ig, "") + "";
var imageUrl = description.match(/http:\/\/d.*?jpg/i) + "";
var imageCaptionText0 = description.match(/alt="([^ ]).*border/) + "";
var imageCaptionText1 = imageCaptionText0.replace(/alt="/ig, "") + "";
var imageCaptionText = imageCaptionText1.replace(/" border.*/ig, "") + "";
var storySummaryText = description.replace(/<[^>]*>([\s]?)*<[^>]*>/g, "") + "";
var storySection0 = description.match(/http[^ ].*\*/i) + "";
var storySection1 = storySection0.replace(/\/\*/ig, "") + "";
var storySection = storySection1.replace(/http:\/\/us.rd.yahoo.com\/dailynews\/rss\//ig, "") + "";
var geoString = (imageCaptionText + " " + storyTitleText + " " + storySummaryText);
rssStorySection.push(storySection);
rssStoryTitle.push(storyTitleText);
rssStorySummary.push(storySummaryText);
rssImageCaption.push(imageCaptionText);
rssStoryUrl.push(storyUrl);
rssImageUrl.push(imageUrl);
rssGeoText.push(geoString);
rssStoryNumber.push(c);
var content = geoString;
var geoQuery = 'SELECT * FROM geo.placemaker WHERE documentContent =' + '"' + content + '"' + 'AND documentType=' + '"' + 'text/plain' + '"';
var res2 = y.query(geoQuery);
var data2 = res2.results;
}
var d = data1;
var e = data2;
response.object = <stories>
<c>{section}</c>
<d>{d}</d>
<e>{e}</e>
</stories>;
]]></execute>
</select>
</bindings>
</table>