取り締まり情報等をlinenotifyに通知する

連休ももうすぐ終わってしまいます。なんか、ブログ書けないかなと思って、興味のあったスクレイピングをやってみました。最初、pythonでやっていたのですが、pythonだと定期的に通知することがちょっとむずかしい(常時立ち上げ等)ので、今回はGASを使ってみました。GASは、GoogleAppsScriptであり、Googleが開発・提供しているプログラミング言語です。JavaScriptというWebブラウザ上で動作するプログラミング言語がベースになっています。

書いたコードは下記のとおり。コメントは記入のとおり。

//交通取り締まり情報をline notifyに通知する
function test_myfun() {

//新聞が掲載しているので、新聞のurlを指定する。
//letなのでこのブロックのみの変数となる。
  let url = "https://www.***********.co.jp/category/news-****/
//上記のurlのソースを取得する。
  let html = UrlFetchApp.fetch(url).getContentText("utf-8")
//urlデータを抜き取りする。"<a href=" ~ "</a>"の間をとってくる。
//iterate()は複数を取得。リストになる。 
  let newsList = Parser.data(html)
    .from ("<a href=")
    .to("</a>")
    .iterate();

//日付を取得する
。Dateはクラスなので、newでインスタンスするみたい。
  var d = new Date()

// 数字を文字列にする。
//  Logger.log((d.getMonth()+1).toString())
//  Logger.log((d.getDay()+1).toString())
  m = (d.getMonth()+1).toString()
  d = (d.getDay()+1).toString()

//半角を全角化する
  if(m.match(/[0-9]/g)){
    m = m.replace(/[0-9]/g,
    String.fromCharCode(m.charCodeAt(0) + 0xFEE0))
  }
  if(d.match(/[0-9]/g)){
    d = d.replace(/[0-9]/g,
    String.fromCharCode(d.charCodeAt(0) + 0xFEE0))
  }
  md = m + "月" + d + "日"
  //Logger.log(md)

//上記で取得したハイパーリンク別のデータを確認する。
//newsListの配列数すべてを実施する。
  for(var i = 0 ; i < newsList.length; i++){
//確認用 newsListの中身を出力
//    Logger.log("news::::"+newsList[i]);
// 日付を含んだ情報を判定し、している場合、titleとハイパーリンク先を取得する。
    if(newsList[i].match(md)){
        var title = Parser.data(newsList[i])
          .from ("title\">").to("<")
          .iterate();
       var hylink = Parser.data(newsList[i])
         .from ("\"").to("\"")
         .build();
    }
  }  
//確認用 title,hylinkの中身を出力
//  Logger.log("hylink:::"+hylink)
//  Logger.log("title:::"+title[0])

//直接入力するurlがわからないため、上記の方法で日別のurlを取得している。
//取得したurlで当日の取り締まり情報を取得する。
//抜き取りの仕方は上記と同じ。
  url = "https://www.****************.co.jp"+hylink
//  Logger.log(url)
  html = UrlFetchApp.fetch(url).getContentText("utf-8")
//  Logger.log(html)
  let news = Parser.data(html)
    .from ("<meta name=\"description\" content=\"")
    .to("\" />")
    .build();

//確認用 中身を出力
//  Logger.log(news)
  var mes = news.split(" ")
  for(let i in mes){
//確認用 中身を出力
//    Logger.log(mes[i])
  }

// line notify に通知する。
  let line_url = "https://notify-api.line.me/api/notify"
  let access_token =  '**************************'

  let options = {
    "method": "post",
    "payload": {"message":"交通取り締まり情報\n"+md+"\n"+mes[1]+"\n"+mes[2]+"\n"+mes[3]+"\n"+mes[4]},
    "headers": {
      "Authorization": "Bearer "  + access_token }
    }

UrlFetchApp.fetch(line_url,options);

}

ライブラリを使用しています。Parserライブラリが必要です。インストールのIDは下記のとおり。(出典:https://specially198.com/scraping-with-gas-using-parser-library/)

1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

Parserを使うとfromとtoで抜き取り箇所を指定できるようになります。

linenotifyは、アクセストークンの発行が必要になります。access_tokenの部分を発行したトークンに修正してください。

情報ができましたら、あとは、トリガーをかけるだけ。

 トリガーを追加をクリックして、下記の状態を保存すれば完了。デプロイとは、urlで使用できるようにすることで、実行するデプロイとは、バージョンを決めることになります。バージョンが分かれていなければ、最新(Head)が選択されます。

このように通知がくるようになります。

このように、ネットの情報を必要な部分だけ、定期的に送ることができるようになります。GASだと、サーバーもたてなくていいので楽ですしね。

発信者のhtml内容が変わると変更が必要ですが、欲しい情報を定期的に知れるのはよいのではないでしょうか?

連休が終わってしまう。。。

ラズパイ使ってみたいので、やってみようかな~。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中