世界で5人くらいに役立ちたいこの広告は、90日以上更新していないブログに表示しています。2017-09-03PHPでSlackに現在の降雨情報を投げてみる暑い寒い寒い寒い暑い暑い寒いみたいなの本当につらいのでやめてほしい。Slackで現在の降水情報を見たいと思うときがあります。ないですかそうですねそんな気もします。アメッシュ見ろやって話ではあるんですが、範囲の狭さ的に「そろそろやばいな」オーラを把握するのが面倒です。いうわけで、誰が得するのかわかりませんが現在の雨情報をSlackで投げてみましょう。Functionとかでやればいいんでしょうが、お金がないのでサイト動かしてるサーバーで簡単に動くPHPにします。ほかの選択肢もあるにはあるんですけど、いまいち動かし方わからんという感じなので...。全体の流れ今回はSlackで適当に雨って投げたら動いてくれる仕組みにします。(files.upload))Slackに投稿されるみたいな感じにしましょう。WebhookはLegacyとか言われていますが、特に終わる気配はないはずなのでこちらで。commandあたりでも作れると思います。Webhookの設定は世界のどこかにあると思うので(というか面倒なので)すっ飛ばしていきます。降水量については、できれば高解像度降水ナウキャストがほしいんですけど、使う手段がよくわからない状態です。高解像度降水ナウキャストそのため今回はYahooのスタティックマップを使って現在の降水情報を取得し、Slackに投げていきます。便利なことに画像でそのままくれるので、そのまま投げればよい感じです。developer.yahoo.co.jp使い方は上からどうぞ。多彩なオプションが使えるので自分だけの最強アメッシュ画像を作ろう!とかができます。今回はこんな感じで使っていきます。https://map.yahooapis.jp/map/V1/static?appid={appId}&lat=35.504193&lon=139.473445&z=9&width=600&height=450&overlay=type:rainfall|datelabel:off&style=base:green|off:background,address,area_name,line_name|on:nature,water,prefectureappIdは自分のアプリケーションIDをいれます。好きな座標を入れましょう。zはズームレベルを示します。値が大きいほど狭い範囲の拡大画像となります。heightは画像の大きさを示すので好きな値で。overlayは地図上に出すメタ情報的なものを指定できます。道路名、山手線などの線路などを表示するかを指定できます。雨が見たいので割とoffでざっくり消してます。県の名前くらいはさすがに欲しいのでprefectureはon。降雨情報はtype:rainfallで表示できます。これでこんな画像ができあがります。色合いとかはstyleとかでいじってください...。この画像をPHPで取得していきます。$data;}もともとはamedasLinkをfile_get_contentsでとっていたのですが、なんかうまくいかず...。助けてStackOverflowをしたらこんな記事が見つかったのでcurl_get_contentsをそのままもらいましょう。stackoverflow.comこれでひとまずyahooの降雨情報をサーバー上で取得して保存まではできました。保存した画像をSlackに投稿していきます。Webhookではファイルアップロードはできません。attachmentsのimage_urlを指定すればいいじゃん!っていう話ではありますが、諸事情であんまりドメインとか見られたくないとかあったりあったりで。なんにせよSlackへのファイルアップロード自体はできません。いうわけでアップロードしていきましょう。APIのリファレンス読めばまあ何とかなるかなぁと。SlackPOSTで投げるパラメータ自体はある程度理解できそうなのでこちらもcurl_execで投げつけていきます。handlecurl_exec($ch);curl_close($ch);試行錯誤の成果みたいな状態...。WebhookではPOSTメソッドでtrigger_textやらを投げてくるので、POSTパラメータから投稿されたメッセージのchannel_idを取得します。その後curlで投げるPOSTパラメータにchannelsという形で指定します。これで投稿されたチャンネルに画像が投稿されます。curlでPOST投げるコードについては次の記事あたりを参考にしました。masabloggers.blogspot.jpcurl周りは良しなに設定してなげつけます。これで基本的にはうまくいくはず...?最終的なコード大体こんな感じです。handlecurl_exec($ch);curl_close($ch);}}file_put_contentsの戻り値はファイルサイズを返すので、0だったらどちらにしろダメという感じで抜けます。あとは戻り値を取るとファイル書き込みの完了を明示的にできるというあれそれ。説明っぽい説明がすっ飛んでいる記事になってしまった。そもそもPHPが詳しくないというのが問題な気がする。最近いろいろ思うところもあるので、またOfficeとか追っていきたいなぁという感情はありつつ。会社でOffice使わないのがスーパーモチベーション下がる...。月別アーカイブはてなブログをはじめよう!fantasticswallowさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。