2017 Jan. 05.
2017 Jan. 04.
送信するURL
var now = new Date();var month = now.getMonth()+1;
var day = now.getDate();
var monthDay = month+"月"+day+"日 ";
var url = 'https://ja.wikipedia.org/w/api.php?format=json&utf8&action=query&prop=revisions&rvprop=content&titles=';
url = url + monthDay;
取得するJSONデータ構造
{
"batchcomplete": "",
"query": {
"pages": {
"4951": {
"pageid": 4951,
"ns": 0,
"title": "1月4日",
"revisions": [
{
"contentformat": "text/x-wiki",
"contentmodel": "wikitext",
"*": "{{カレンダー 1月}}\n'''1月4日'''(いちがつよっか)は[[グレゴリオ暦]]で年始から4日目に当たり、"
}
]
}
}
}
}
JSONデータ.query.pages[ pageid[0] ].revisions[0]["*"] に本文が格納されている。
本文の内容の書式
次の区切り文字列・順番で記事が並んでいる。
各記事はアスタリスク(*)で始まり改行文字で終了している。
== できごと ==
== 誕生日 ==
== 忌日 ==
== 記念日・年中行事 ==
== フィクションのできごと ==
== 誕生日(フィクション) ===
== 出典 ==
== 関連項目 ==
wikipediaから今日に関する記事を取得し文字列で返すJavaScript
function wikipediaWhatIsToday(countArticle) { // countArticleに取得する記事数を指定するvar now = new Date();
var month = now.getMonth()+1;
var day = now.getDate();
var monthDay = month+"月"+day+"日 ";
var url = 'https://ja.wikipedia.org/w/api.php?format=json&utf8&action=query&prop=revisions&rvprop=content&titles=';
url = url + monthDay;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
// get the page IDs
// http://stackoverflow.com/questions/30006183/get-wikipedia-pageid-from-title より
var pageid = [];
for( var id in data.query.pages ) {
pageid.push( id );
}
// 記事本文を取得
var content = data.query.pages[ pageid[0] ].revisions[0]["*"]; // キー*の値は["*"]で取り出す
// 「できごと」を取り出す
var dekigoto = content.match(/== できごと ==[\s\S]*== 誕生日 ==/); // 改行文字を含む文字列には [\s\S]* を使う
// アスタリスクで始まり改行文字で終わる文字列を取り出す
article = dekigoto[0].match(/\*.+\n/g); // *の前に\が必要
// countArticleの個数の記事を取り出す
var numberArticle = [];
while (true) {
var rand = Math.floor( Math.random() * article.length) ;
numberArticle.push(rand);
numberArticle = numberArticle.filter(function (x, i, self) {
return self.indexOf(x) === i;
})
if (numberArticle.length == countArticle ) {
break;
}
}
var outputText = monthDay + "のできごと\n";
numberArticle.forEach(function(numLine) {
outputText = outputText + article[numLine] + "\n";
});
return outputText;
}
0 件のコメント:
コメントを投稿