2022/06/02に更新

【GASで時短】NHKの番組表を取得する

APIスプレッドシート

NHKが提供している番組表APIを利用して、スプレッドシートに番組表を書き出すGoogle Apps Scriptです。見たい・録画したい番組を探す時などにどうぞ。

こんな悩みを解決します


  • NHKの番組表からお気に入りの芸能人が出ている番組だけ探したい!
  • 番組を見逃さないように開始前に通知したいが、番組表データがなくて困っている。

用意するもの


特にありません。GASの実行環境としてスプレッドシートを利用します。

このスクリプトで出来ること


  • NHKの番組表APIを利用して、本日の番組表を出力することができます。

使い方


1.事前準備

NHKのAPIポータルでユーザー登録し、APIキーを発行してください。
発行されたAPIキーをスクリプトの「事前設定エリア」にセットします。

2.スクリプトの実行

上のメニューにある「スクリプト実行」から「今日のNHK番組表を取得する」を実行します。

3.結果の確認

シートに番組表が書き出されます。
書き出される項目は以下の通りです。

  • チャンネル
  • 開始日時
  • 終了日時
  • タイトル
  • サブタイトル
  • コンテンツ
  • 出演者

空欄の項目があったり、出演者の記述方法に統一感がなかったりするのがちょっと残念ですね。
このAPIは「視聴機会の増大」を目的として公開されているそうです。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00098/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('今日のNHK番組表を取得する', 'get_nhk_programs');

  // メニューを画面に追加する
  menu.addToUi();
}

function get_nhk_programs() {

  // ########## 事前設定エリア ココから ##########

  // NHK番組表APIにユーザー登録し、発行したAPIキーをセットしてください
  const api_key = '***************************';

  // ########## 事前設定エリア ココまで ##########


  // スクリプトを実行した日の番組表を取得するので、本日の日付を取得
  const today = Utilities.formatDate(new Date(), 'JST', 'yyyy-MM-dd');

  // リクエストURLの組み立て。東京(130)のTV番組を対象にしています。
  const url = 'https://api.nhk.or.jp/v2/pg/list/130/tv/' + today + '.json?key=' + api_key;

  // APIにアクセスしデータを取得する
  const response = UrlFetchApp.fetch(url);

  // JSON形式で返ってくるので、操作しやすいようオブジェクト形式に変換する
  const json = JSON.parse(response);

  // 番組データはキー:listに入っているので取得する
  const programs = json['list'];

  // 総合、教育、BSなど、チャンネルごとにキーが異なる。1つずつ取得するためにキーを取り出す。
  const ch = Object.keys(programs);

  // シートに書き込み用の配列を宣言
  const result = [];

  // 1チャンネルずつループする
  for (let i = 0; i < ch.length; i++) {

    // チャンネルごとに番組を取得する
    for (let j = 0; j < programs[ch[i]].length; j++) {

      // 書き込み用の配列に追加する
      result.push([
        programs[ch[i]][j]['service']['name'],
        programs[ch[i]][j]['start_time'],
        programs[ch[i]][j]['end_time'],
        programs[ch[i]][j]['title'],
        programs[ch[i]][j]['subtitle'],
        programs[ch[i]][j]['content'],
        programs[ch[i]][j]['act']
      ])
    }
  }

  // アクティブなスプレッドシートのオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // アクティブなシートオブジェクトを取得
  const sheet = ss.getActiveSheet();

  // 項目名を追加する
  result.unshift(['チャンネル', '開始日時', '終了日時', 'タイトル', 'サブタイトル', 'コンテンツ', '出演者']);

  // 書き込むデータに応じて範囲オブジェクトを取得する
  const range = sheet.getRange(1, 1, result.length, result[0].length);

  // 番組表データをシートに書き込む
  range.setValues(result);

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp