Google Apps Scriptを使用して小説家になろうの作品をWayback Machineに自動でアーカイブする
はじめに
自動で小説家になろうの作品をアーカイブに追加するスクリプトをpythonで書いたが、
いちいち自分で起動しなければならず、面倒くさい。
そこで、Google Apps Scriptを使用して、
毎日決まった時間に小説家になろうの作品を自動でWayback Machineにアーカイブに追加するようにした。
やったこと
1.payloadの分析
2.Wayback Machineの分析
3.スクリプト
4.スケジューリング
1.payloadの分析
htmlのサイトにリクエストする際、GETパラメータを送ることがある。
これについてまったく知識がなかったのだが、
によれば、urlの最後に書けばいいらしい。
つまり、
payload = {'out': 'json','gzip':5, 'rtype':day }
は
?out=json&gzip=5&rtype=day
をurlの最後につければいいということだ。
つまりこのurlにアクセスすればよい
https://api.syosetu.com/rank/rankget/?out=json&gzip=5&rtype=20200304-d
パラメータはこれを参照した。
2.Wayback Machineの分析
こちらにも書いた方法だと、いちいちサイトにアクセスしなければならない。
urlを分析したところ、
'https://web.archive.org/save/' + 保存したいurl
にアクセスすると、urlのサイトをアーカイブし、結果のページに飛ぶことが分かった。
結果のページに飛ぶ分、時間がかかってしまうのが問題点だが、
いちいちセーブのページに移動して、urlを入力してボタンを押す手間が省けた。
3.スクリプト
gasの使い方などはほかのサイトのほうが詳しいので調べてください。
function get_narou(mode){
var now = new Date();
var date = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyyMMdd');
var day = date + '-' + mode
Logger.log(day)
var payload = "?" + 'out=json'+ "&" + 'gzip=0' + "&" + 'rtype=' + day;
Logger.log(payload)
var url = "https://api.syosetu.com/rank/rankget/" + payload
Logger.log(url)
var responseDataGET = UrlFetchApp.fetch(url).getContentText('UTF-8');
Logger.log(responseDataGET);
var contentJson = JSON.parse(responseDataGET)
return contentJson;
}
function wayback(url){
var pdf_url = 'https://web.archive.org/save/'+url
Logger.log(pdf_url)
var options = {
"muteHttpExceptions": true, // 404エラーでも処理を継続する
}
var responseDataGET2 = UrlFetchApp.fetch(pdf_url, options);
var code = responseDataGET2.getResponseCode();
Logger.log(code);
//Logger.log(responseDataGET2.getContentText('UTF-8'));
Logger.log("--------------------------------------------")
}
//
function narou_wayback(mode){
contentJson=get_narou(mode);
for (let i=0; i<contentJson.length; i++){
var url = "https://pdfnovels.net/" + contentJson[i].ncode +"/main.pdf";
Logger.log(i+ "番目 "+ contentJson[i].ncode)
wayback(url)
}
}
//modeは日間の場合はd,週間の場合はw,月間の場合はmが、四半期の場合はqが入ります。
//+制約+
//・2013年5月1日以降の日付を指定してください。
//・週間を取得する場合、日付は火曜日の日付を指定してください。
//・月間、四半期を取得する場合、日付は1日を指定してください。
//また、「小説を読もう!で公開しているランキング」の日間ランキングは1日3回更新されていますが、このAPIでは午前4時~午前7時に作成した日間ランキングのみを蓄積しAPIで提供しています。 予めご了承願います。
function day(){
narou_wayback("d")
}
function week(){
narou_wayback("w")
}
function month(){
narou_wayback("m")
}
function quarter(){
narou_wayback("q")
}
(qiitaがgasに対応していないみたいなので.jsにしています。)
解説
1.get_narou(mode)
でランキングを取得し、jsonで返す。
2.jsonから小説ごとに割り当てられているncodeを取得し、urlを作成する
3.wayback(url)
に順番に入れて、アーカイブを登録する。
参考にしたサイト
4.スケジューリング
さらにトリガーを使用して決まった時刻に動くようにしました。
トリガーを追加を押して、
このように設定しました。
問題点
これによれば、
+制約+
・2013年5月1日以降の日付を指定してください。
・週間を取得する場合、日付は火曜日の日付を指定してください。
・月間、四半期を取得する場合、日付は1日を指定してください。
詳しくは制約についてをご覧ください。
とある。
今回のスクリプトでは、実行時の日付を使用して小説家になろうAPIにアクセスしているため、
週間、月間、四半期を毎日アーカイブすることができず、
スケジュール設定で毎週、毎月指定の日程に実行するようにしているので、そこをいつか改善したい。
Author And Source
この問題について(Google Apps Scriptを使用して小説家になろうの作品をWayback Machineに自動でアーカイブする), 我々は、より多くの情報をここで見つけました https://qiita.com/yuki_2020/items/40362aec281f8fa0a8ab著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .