Google Apps Script를 사용하여 소설가가 되는 작품을 Wayback Machine에 자동으로 보관

소개



자동으로 소설가가 되려는 작품을 아카이브에 추가하는 스크립트를 파이썬으로 작성했지만,
일일이 스스로 기동하지 않으면 안 되고, 귀찮아.

그래서 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의 사용법 등은 다른 사이트 쪽이 상세하므로 조사해 주세요.

narou_wayback.js

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에 액세스하기 때문에,
주간, 월간, 분기를 매일 보관할 수 없으며,
스케줄 설정으로 매주, 매월 지정의 일정에 실행하도록 하고 있으므로, 거기를 언젠가 개선하고 싶다.

이렇게 실행시간은 6분까지다.

좋은 웹페이지 즐겨찾기