BASIC NEWSの技術的な話

はじめに

このページではBASIC NEWSを生成するGoogle Apps Scriptのスクリプト
について説明しています。

BASIC NEWSは2つのスクリプトで構成されています。

  • 夜間にトリガー機能で毎日実行される記事収集処理
  • ブラウザから収集した記事を編集する記事編集画面

以下、この2つのスクリプトについて解説したいと思います。

記事収集処理(メイン)

メイン関数のソースは以下です。
この関数を毎日指定した時刻にトリガー機能で実行します。

function bloggerbasicmainfm01() {
  // ツイッター、Googleカスタムサーチ、youtube、はてなブックマーク、koboを検索してファイルに出力する
  
  // Googleカスタムサーチ 検索ワード 
  var words = [
  'BASIC プログラム',
  'BASIC プログラム site:chiebukuro.yahoo.co.jp',
  ];

  // その他 検索ワード 
  var wordsx = [
  'BASIC プログラム',
  'BASIC プログラミング',
  ];
  
  var kekka = '';
  var kekkagcs = '';
  var kekkatw = '';
  var kekkahtb = '';
  var kekkayou = '';
  var kekkakob = '';

  var ddata = '';
  var ddatast = '  [\n';
  var ddataen = '\n  ]';

  // kobo検索
  for (var i = 0; i < wordsx.length; i++) {
    kekkakob += kobosr(wordsx[i]);
    Utilities.sleep(1000)
  }

  // youtube検索
  for (var i = 0; i < wordsx.length; i++) {
    kekkayou += youtubesr(wordsx[i]);
    Utilities.sleep(1000)
  }

  // はてなブックマークRSS検索
  for (var i = 0; i < wordsx.length; i++) {
    kekkahtb += hatenabook(wordsx[i]);
    Utilities.sleep(1000)
  }

  // twitter検索
  for (var i = 0; i < wordsx.length; i++) {
    kekkatw += twsrch(wordsx[i]);
    Utilities.sleep(1000)
  }

  // 検索ワード分Googleカスタムサーチする
  for (var i = 0; i < words.length; i++) {
    kekkagcs += gcsget(words[i]);
    Utilities.sleep(1000)
  }

  // JSONデータを生成  
  var svrfilename = 'json.txt';
  ddata = ddatast + kekkatw + kekkayou + kekkagcs + kekkahtb + kekkakob.slice( 0, -2 ) + ddataen;

  // Google ドライブに保存  
  var files = DriveApp.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    if (svrfilename == file.getName()) { 
      Logger.log(file.getName());
      file.setContent(ddata);
      Logger.log('更新完了');
    };  
  }
  return false;
}

TwitterやYoutubeなどの情報源をAPI経由等で検索。
結果をJSONファイルとしてGoogleドライブに保存してるだけです。
Googleドライブに保存したJSONを記事編集画面で利用します。

記事収集処理(kobo)

記事収集処理(メイン)から呼び出される各情報元毎の
検索関数のうちkobo書籍検索を例として載せておきます。

function kobosr(p1) {
  // kobo書籍検索
  var url1 = 'https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20140811?format=json&keyword=';
  var url2 = encodeURIComponent(p1);
  var url3 = '&language=JA&hits=5&sort=-releaseDate&applicationId=xxxx';
  var url = url1 + url2 + url3;
  var jsonKobo = UrlFetchApp.fetch(url).getContentText();
  var book = JSON.parse(jsonKobo);
  Logger.log(book.Items.length);
  
  var kobo = '';
  var jsonout = '';
  var jsonwk = '';
  var jsonwkhtml = '';
  
  // 取得件数は最大5件
  for (var i=0; i < book.Items.length; i++) {

    //タイトル名,画像,URL,著者,概要取得
    // はてな記法 * 見出し [~:] 画像
    kobo += '<h2>'+book.Items[i].Item.title+'(&#128214;)</h2>\n';
    kobo += '<img src="'+ book.Items[i].Item.smallImageUrl.replace('?_ex=64x64','') +'"><br>'+'\n';
    kobo += '<a href="'+book.Items[i].Item.itemUrl+'">'+book.Items[i].Item.itemUrl+'</a><br>\n';
    kobo += '概要:【'+book.Items[i].Item.author+' 著】'+book.Items[i].Item.itemCaption+'<br><br>\n\n';

    jsonwkhtml = '<h2>'+book.Items[i].Item.title.replace(/\"/g,'”')+'(&#128214;)</h2>';
    jsonwkhtml += '<img src=\\"' + book.Items[i].Item.smallImageUrl.replace('?_ex=64x64','') + '\\">'+'<br>';
    jsonwkhtml += '<a href=\\"'+book.Items[i].Item.itemUrl+'\\">'+book.Items[i].Item.itemUrl+'</a><br>';
    jsonwkhtml += '概要:【'+book.Items[i].Item.author.replace(/\n/g,'').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'”')+' 著】'+book.Items[i].Item.itemCaption.replace(/\n/g,'').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'”')+'<br><br>';
    
    jsonwk = jsontemp001(book.Items[i].Item.title.replace(/\"/g,'”'),book.Items[i].Item.itemCaption.replace(/\n/g,'').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'”'),jsonwkhtml,'no-massage','no-massage','no-massage');
    jsonout += jsonwk + ',\n'


  }
  return jsonout;

}

kobo検索のwebapiを呼び出して書籍名を検索してJSON用
データを作成しています。

記事編集画面

記事編集画面もGASでWEBアプリを作って利用しています。

WEB画面についてはソース例を作るのが難しいので
画面のイメージと説明のみ記載します。

WEBアプリなので画面側でボタンを押すとJavascript経由で
GASの関数を呼び出してcallbackで画面側に結果を返して
います。

この画面の例ではありませんが、似たような画面を作成
したときの記事が以下にありますので参考までに
載せておきます。

ドシロウトがGASでSpreadSheetをデータベース替わりにWebアプリケーション作ってみた

BASIC NEWSでは収集した記事を最終的には人が
編集画面で削除しています。

終わりに

BASIC NEWS の技術的な部分についての話を簡単に記載
しました。

もっと簡単な方法があるかもしれませんが私の技術レベル
ではこれが限界でした。

以上

コメント

このブログの人気の投稿

BASIC NEWS(2023/04/14 06:19)

BASIC NEWS(2023/04/13 06:36)

BASIC NEWS(2023/04/10 05:58)