shiisuke’s blog

文系卒。社会人5年目くらい。ITやプログラミングの勉強で学んだことを書きます。

天気予報を博多弁で通知するプログラムを作ってみた(Livedoor Weather Web Service + GAS + Chatwork)

f:id:shiisuke1229:20190623200306p:plain

Ⅰ.きっかけ

数年前に福岡から東京に来て、「博多弁」に触れる機会があまりなくて寂しく感じていました。そこで、標準語のテキストを博多弁に変換するプログラムを作ってみることにしました。

Ⅱ.博多弁とは1

  • もともとは福岡市博多部を中心とする日本語の方言のことを称していたが、現在では福岡市内全域や、福岡地方の筑紫地区・糸島地区・糟屋地区南部などで一般的に使われる言葉を総称している
  • 博多弁には以下のような文法がある
    • 順接:「〜だから」→「~やけん」
      • 例)「お前が遅れるから、連絡できなかったんだよ。」 →「お前が遅れるけん、連絡できんかったとよ。」
    • 逆説:「〜んだけど」→「~っちゃけど」
      • 例)「よく探してみたんだけど、書類は見つからなかったよ。」 →「よく探してみたっちゃけど、書類は見つからんやったよ。」
    • 疑問文:「~なの?」→「~と?」
      • 例)「知っている?」→「知っとー?」

Ⅲ.作るもの

  • 天気予報をChatworkに博多弁で通知する
    • 例)「雨が降っている所があります」→「雨が降っとう所があるよ」
  • 1日に1回、任意の時間(今回は 20:00~21:00)に通知する

Ⅳ.実現方法

  1. livedoorが提供するお天気WebサービスLivedoor Weather Web Service」のWeb APIで天気予報を取得する
  2. Google Apps Scriptで天気予報を博多弁に変換する
  3. ビジネスチャット「Chatwork」に通知する

Ⅴ.手順

1.標準語→博多弁の変換テーブルを用意する

(1)Googleスプレッドシートを新規で開く

(2)A列に標準語を、B列に博多弁を記入する f:id:shiisuke1229:20190623181102p:plain

2.Chatworkを用意する

(1)アカウントを取得する

(2)APIトークンを発行する2

(3)ルームIDを確認する3

(4)以下の手順で、Googleスプレッドシートのライブラリに「ChatWorkClient for Google Apps Script」を追加する

  1. 「リソース > ライブラリ」を選択
  2. プロジェクトキーに「M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT」を入力して追加
  3. バージョンとして最新のものを選択
  4. 「保存」をクリック
f:id:shiisuke1229:20190623184632p:plain:w400

3.スクリプトを作成する

(1)標準語→博多弁変換テーブルを用意したシートのメニューから、「ツール > スクリプトエディタ」を選択する

(2)プロジェクトに名前を付ける(今回は「天気予報を博多弁で通知」とした)

(3)以下のコードを記述する4

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var last_row = sheet.getLastRow();
  
  //天気予報データを取得
  //"city="の隣には、地域別に定義されたID番号を記入(今回は東京とした)
  var response = UrlFetchApp.fetch("http://weather.livedoor.com/forecast/webservice/json/v1?city=400010");
  
  //取得したJSONデータを配列jsonに格納
  var json = JSON.parse(response.getContentText());  
  var str = json["description"]["text"];
  
  for (var i = 1; i < last_row; i++){      
    var x1 = sheet.getRange(i + 1, 1).getValue();
    var x2 = sheet.getRange(i + 1, 2).getValue();
    var str = str.replace(x1, x2);
  }
  sendMessage(str); 
}

function sendMessage(body){
  var client = ChatWorkClient.factory({token: "ChatworkのAPIトークンを記入する"}); 
  client.sendMessage({
    room_id: ChatworkのルームIDを記入する,
    body: body});
}

(4)メニューの「ファイル > 保存」または「Ctrl + S」(Macの場合は command + S)で保存する

4.スクリプトを実行する

(1)メニューの「実行 > 関数を実行」または「Ctrl + R」(Macの場合は command + R)を押す

(2)【初回の実行時のみ】「承認が必要です」というダイアログが表示されるので、「承認を許可」→自分のアカウントを選択→「詳細 > 天気予報を博多弁に変換する(安全ではないページ)に移動」→「許可」という手順を踏む

(3)Chatworkに、博多弁に変換済みの天気予報が通知されていることを確認する

<届いた通知> f:id:shiisuke1229:20190623192822p:plain

  • 赤は変換がうまくいったところ
  • 青は変換できなかったところ
    • こちらの解決策は見つけられていません

5.メールの送信タイミングを設定する

(1)メニューの「編集 > 現在のプロジェクトのトリガー」を選択し、画面右下にある「トリガーを追加」を選択する

(2)「イベントのソースを選択」で時間主導型を選択し、通知を受け取りたいタイミングを設定して「保存」をクリックする

f:id:shiisuke1229:20190623193854p:plain:w400

(3)指定された時間に通知されていることを確認する

f:id:shiisuke1229:20190623203900p:plain

Ⅵ.感想

今回のプログラムは、変換表にある言葉を博多弁へ逐一変換していくという簡単なものでしたが、「雨の降っとう所がある」「低気圧が北東へ進んどうよ」など、いい感じの天気予報ができました(^^)

特に、「注意しとってね」という表現は、標準語の「注意してください」よりもスッと頭に入ってくる感じがして良かったです。

他方、このプログラムでは変換したい言葉のすべてを変換できなかったので、今後修正したいと思います。また、品詞を自動的に判別してくれるツールがあるということなので、こちらも使ってみたいと思います。

Ⅶ.参考記事