0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASでスプシのキーワードから検索結果のスクショを保存

Posted at

GASでスプシのキーワードから検索結果のスクショを保存

情報が少ないGASの実装例をメモ程度に残します。

概要、キーワードと日付が並べられたスプシに対して以下のスクリプトを実行すると、明日の日付と隣り合わせになっているキーワードについて設定した関連ワードとOR検索をして、一覧のページをフルスクリーンでスクリーンショットを撮り、指定したGoogleDriveに保存するもの。

1. 実装したコード

function myFunction() {
  var spreadsheet = SpreadsheetApp.openByUrl('スプシのURL');
  var sheet = spreadsheet.getSheetByName('シート1'); // 検索ワード記載シート
  var lastrow = sheet.getLastRow(); // 最後の行番号
  var searchWords = sheet.getRange("A2:A"+lastrow).getValues();
  var searchDates = sheet.getRange("B2:B"+lastrow).getValues();

  var apiKey ="アクセスキー";//APIFLESHのアクセスキー
  var folderId ="ID"; // ここに保存先GoogleドライブID

  var date = new Date();
  date.setDate(date.getDate() + 1); //明日の日付
  var tomorrow = Utilities.formatDate(date, 'Asia/Tokyo', 'YYYY/MM/dd');
  var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'YYYY/MM/dd');

  for(let i = 0; i<lastrow-1; i++) {
    if(typeof searchDates[i][0] == typeof new Date()){
    Logger.log(Utilities.formatDate(searchDates[i][0], 'Asia/Tokyo', 'YYYY/MM/dd'));
    if(Utilities.formatDate(searchDates[i][0], 'Asia/Tokyo', 'YYYY/MM/dd') == today){
      // 検索結果取得
      var displayNum = 30; // 検索数
      var url = "https://www.google.com/search?hl=ja&as_q="+searchWords[i][0]+"&as_epq=&as_oq=関連キーワード&num="+displayNum;
      var encodeUrl = url.replace(/[^*+.-9A-Z_a-z-]/g,function(s){
        var c=s.charCodeAt(0);
        return (c<16?"%0"+c.toString(16):c<128?"%"+c.toString(16):c<2048?"%"+(c>>6|192).toString(16)+"%"+(c&63|128).toString(16):"%"+(c>>12|224).toString(16)+"%"+(c>>6&63|128).toString(16)+"%"+(c&63|128).toString(16)).toUpperCase()
      });
      var requestUrl = "https://api.apiflash.com/v1/urltoimage?access_key="+apiKey+"&full_page=true&url="+encodeUrl;
      Logger.log(url);
      Logger.log(requestUrl);
      try {
        var response =UrlFetchApp.fetch(requestUrl).getContentText(); // ここで1回リクエストを送って画像を作らせる
        Utilities.sleep(1000 * 20); // 画像出来上がるまで1分待機
    
        var image = UrlFetchApp.fetch(requestUrl).getBlob(); // ここで画像DL
        var folder = DriveApp.getFolderById(folderId);
        folder.createFile(image).setName(today+"_"+searchWords[i][0]);//日付で画像の名前を付ける
      } catch (e) {
        Logger.log("取得エラー");
      }
    }
  }
}

2. 詳細

1. ページ全体のスクリーンショットを撮るのにAPIを使用しているが、無料プランで登録しており、月に100枚の制限がある。100枚以上の場合には他のAPIやメソッドを検討する(調べた限りではなさそう)、又は有料のプランに切り替える必要がある。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?