ラベル Zapier の投稿を表示しています。 すべての投稿を表示
ラベル Zapier の投稿を表示しています。 すべての投稿を表示

2019年4月2日火曜日

Integromat で Gmail のメールを開いたときに文字化けする問題の回避方法

みなさんは RPA に何を使われてますか?最近はたくさんのツールが存在しますね。
RPA ツールというと個人的には IFTTT を代表に上げるのですが、RPA ツールで検索するとちょっと自分のイメージと違うツールがたくさん出てくるのでなにか「IFTTT や Zapier のようなサービスをまとめた」いい言葉があればなーと思っているこの頃です。


前置きはこのくらいにして、本題に入ります。
最近 Integromat をよく使っていたのですが、ついにフリープランを卒業しベーシックプラン($9/月)をはじめました。Zapier が年契約で $18.33/月 なので、安くて助かってます。
Integromat はフリープランでも複雑なシナリオが書けるので大変オススメなサービスです。




ただ、少し困ったことが起きました。
メールを受信したことをトリガーにその内容を通知するシナリオを書こうとしたところ、日本語が正しく読めなかったのです。


具体的な症状としては、iso-2022-jp エンコーディングなメールが読めません。utf-8 は大丈夫でした。
とはいえ、メール配信側にお願いして utf-8 にしてもらうという解決方法は難しそうです。

Zapier はどうなのかというと、iso-2022-jp のメールも問題なく読めます。


じゃ、Zapier にお願いしよう
Zapier はフリープランでも 5 Zap までなら無料で使えるので、Zapier でメールのトリガーだけお願いして、あとは Integromat でやる作戦です。

Zapier 側の設定は Gmail トリガーと Webhook アクションです。
とりあえず、payload には Subject と Body を入れました。


Integromat 側は Gmail トリガーをやめて、Webhook トリガーに変更。それ以降は Integromat の世界で好き勝手にいじれます。


これでなんとか作りたいシナリオができそうです。

最後に
Integromat に Feature Request を出したので、ユーザーの方はぜひ vote をお願いしますmm
https://www.integromat.com/en/requests/feature-requests/p/gmail-encoding-iso-2022-jp

(メールの日本語が読めないことがあります・・・だと正直、日本で布教しにくい・・・)

2018年9月25日火曜日

Wandbox の対応言語・コンパイラバージョンの追加を通知するアカウントを作った

こんにちは。
Wandbox の更新を通知する仕組みは前々あって、新しいコンパイラーが追加されるとリプライをくれるようにしてました。
ブログズミ: Wandbox のコンパイラー追加を通知する環境を作った


それがいつからかリプライを送らなくなってしまってました。


どうやら、Zapier 側で @ 付きのメッセージが制限され、@ を取り除かれてツイートするようになったためでした。


Zapier から Integromat への引っ越しも考えましたが、 引越し先でも @ 制限がかかる可能性は高いので、
Zapier はそのままに通知専用の Twitter アカウントを作成しました。


というわけで、@Wandbox_News をよろしくお願いします。

2018年8月14日火曜日

依存ライブラリの GitHub を Travis CI で定期的に監視して DockerHub Automate Build を実行する(+ Codefresh ジョブを Trigger)

目的
開発中のソフトウェアがなんらかのソフトウェアに依存しており、その依存しているソフトウェアの最新の状態を常に追いたい。
具体的には、筆者が開発中の C++ テスティングフレームワーク iutest は、Google Test との互換性のために常に Google Test の最新の状態と互換性テストを行っています。

iutest では Travis CI や Circle CI といった CI サービスを利用して、変更があるたびにテストが行われる環境が整っています。
しかしながら、iutest は毎日更新があるわけではなく、最近は開発スピードも落ちているので数日変更がないこともザラです。
そのため、その間に Google Test に更新があって、いつの間にか互換性テストが通らない状態になっていたりすることがありました。

長くなりましたが、今回のゴールは
・ Google Test の更新を定期的に監視して
・ 変更があったら Docker image を更新
・ Docker image が更新されたら互換性テストが実行される
です。

構成

* 監視されるリポジトリ→ google test
* 監視するリポジトリ→docker-googletest


DockerHub Automate Build
DockerHub で Google Test の入ったイメージを作成するジョブは以下の記事で作成したものを使用します。
ブログズミ: DockerHub Automated Build を使ってみた

今回はこちらの latest イメージを毎日最新の状態にするのが目的です。
DockerHub に定期ビルド機能があればそれで良かったのですが、ないので別のサービスで実現させます。

次へ進みます。

CI の設定
必要なのは、定期ビルドが可能で、GitHub に push できるサービスです。
今回は Travis CI を使いましたが、選んだ理由は最近 GitHub push をここでやったからです。
実際使用している yml はこちらです。こちらを見ながら説明していきます。
dist: trusty
sudo: false
language: cpp

before_script:
  - git clone https://github.com/google/googletest.git ./gtest
  - cd ./gtest
  - git rev-parse HEAD > ../gtest.hash
  - cd ..

script:
  - git checkout master
  - git add -A
  - git commit -m "update head [ci skip]" || true
  - git push https://${GITHUB_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git ${TRAVIS_BRANCH}

env:
  global:
    secure: OdxIMgUsZyGyOOnV49MkJW5KrGVW7KyCwUkWgC88YmdJPCtNJ9fF69TcM8ek252+yFJsfpUrZaNH6A6igRUreveoA161zy+fsD9mMqIrrthFWx5S2fzBCsiCobreduicCDt5EJ1p8N/QlpEB2ZeUbYWqZf37r5BfYOJI86521qYMiI30IAwxsjPqhcbyFRisTKosd3LlEo4Y+K3qLgdCKEAhsaOrtIgrbxz7cM2sKh8lYTquP1XPtFwsmCoELyeRAVEJbSwADcaw3011S/NB8Kn9+sd878dxBK2iDxSilVz+3XIz+/sKZHNFGug5i2UA2yS8ZfWQhZjF9tiF3quTAzqAFzTbxDKswMLHgD8oI0saIVDmXNxc6PXLYXEjx5p5Z3E1iTb09hcp5wOqJOz+Ynie7EkVyUO2DKJhjeuGffoPxjK35L4c7/ufTNskT3+vUnGG/2U9XMA3OeXoCLp+V7BRgkZtpVZssA4viTWXPG4byaEQaiAMK0ArVOesa86m21xuKSLhdNqQ/WRT8g/eEVqs4XrT1ogIW1nsjYHv6Xmcs8QD2iQxDdWHx4pQojod8lSdwn/HFqXTOf6KxqTk5mpJmcd2ZxyDocynTEtvtt+uNtVyJh+gXt06eGD/rlbV1eC+Uc5FMQE2P1Uya3RdaZvMZjYGzVcZMrPcv/gklbY=

Google Test の更新検知
まずは肝心の Google Test (監視される側)の更新検知方法です。
いろいろやり方はあると思いますが、今回は push があるたびにトリガーするのではなく、定期的に(1日1回とか)更新があったかどうかがわかればいいので、定期ビルド実行したときの Google Test の HEAD の commit hash を自分のリポジトリに保存する方法を取りました。
更新があれば diff が出るので、これをトリガーにしています。
これを行っているのが、brfore_script の部分になります。

更新を push して他サービスをトリガーする
最新の commit hash を取得したら、それを commit/push します。
docker-googletest (監視する側)のリポジトリが更新されるので、この push をトリガーに他のサービスをキックすることができます。
監視する側のリポジトリは自身の管理下のはずなので、ここから先は自由にやることができます。

ただし、ここで注意点があります。
Travis CI のジョブもこの push をトリガーにより実行されてしまいます。
すると、この Google Test 監視ジョブが再実行されてしまい、最悪の場合は無限にジョブをキックし続けます。(監視される側の更新が止まれば止まるが、最低でも1回無駄にジョブが走る)

定期ビルド設定
最後にこれを定期ビルドするようにしましょう。
こちらは Travis CI の Web ページで設定します。
プロジェクトのページの「More options」から「Settings」を開くと、一番下に Cron Jobs があります。



DockerHub Automate Build の設定
特に必要ありません。
Google Test が更新されると、commit hash が更新されて push されるのでそれをトリガーにビルドが実行されます。

おまけ
ここまでで、当初の目的の GitHub の監視と、変更検知し DockerHub のビルドを回す、という目的は達成していますが、ついでなので、その先も紹介します。

Slack 通知
通知系は定番ですね。詳しくは過去にも記事にしているので、そちらを見てくださいmm
ブログズミ: Dockerhub Automated Build が終わったら Slack に通知する

docker-googletest の通知仲介は Zapier を使ってますが、今は Integromat もおすすめです。
そちらも記事にしているので、よければご覧ください。私的には、今後は IFTTT/Zapier よりも Integromat をメインに使っていくつもりです。

* 「ブログズミ: プレビュー "(WIP)依存ライブラリの GitHub を Travis CI で定期的に監視して DockerHub Automate Build を実行する(+ Codefresh ジョブを Trigger)"
* 「ブログズミ: CIサービスの結果を Twitter に投稿する

Codefresh のジョブを Dockerhub からの Webhook で実行する
Codefresh のトリガーに Webhook トリガーを追加します。
プロジェクトの「Pipeline」ページの真ん中あたりに「Triggers」があるので、そこで追加していきます。


「ADD TRIGGER」ボタンを押すと以下のようなウィンドウが出てくるので、「REGISTRY」を選択して次へ


続いて、「REGISTRY PROVIDER」を Dockerhub に、「NAMESPACE」と「NAME」はトリガーを発行したい Dockerhub のリポジトリを設定してください。
「ACTION」は Image 更新したときにしたいので、 「Push Image」を選択。docker-googletest にはバージョンごとのタグが複数あり、ビルド対象にしたいのは latest だけだったので、「Configure filter」を設定しました。
入力完了したら、「NEXT」ボタンを押します。


四角く囲ったところに、Webhook の URL と鍵が発行されますので、Dockerhub の Webhook に設定します。(下線のリンクから飛べます)


Dockerhub の Webhook 設定を開いたら、${ENDPOINT}&secret=${SECRET KEY} を入力します。(↑の黄色で囲った部分に出てるアドレスです)



これで完成です。


最後に
外部の依存・関係しているプロジェクトが、いつの間にか更新されていて動かなくなっていた。なんてことはよくあることなので、定期的に監視しておくのはいいことだなと思いました。
あと、この仕組がわりといい感じに組めた気がするので、iutest の Google Test 互換性テストを外部に出す対応に利用しようと思います。
では。

2017年6月5日月曜日

Wandbox のコンパイラー追加を通知する環境を作った

Wandbox で対応コンパイラーが増えたら、自分宛てにツイートしてくれる環境を作りました。



構成
Appveyor + Zapier

概要
https://github.com/srz-zumix/wandbox-news
ソースコードをみていただければ、どんなことやっているかはわかると思います。
特に難しいことはしてなくて、Wandbox API で取ってきたリストを成果物として保存して、前回との差分があれば Webhook を投げます。
あとは、Zapier で Webhook を受け取ってツイートするだけです。

その他
最初は、Google App Engine とか Circle CI とか使おうと思ってましたが、定期ビルド、Webhook Notification、成果物の保存・取得ができる Appveyor に落ち着きました。

あとは、Notification でカスタム json を作るのに、ちょっと手間取りました。
デフォルトで送ると Zapier で message を取るのがめんどくさかった(というか、うまくできない?)ので、カスタムで送るようにしてます。
url が secure 指定できなかったので、Web UI 設定にしてますが、appveyor.yml にコメントで書いてあるので参考にしてください。

では。


※更新なしが FAIL 更新ありが PASS になっているが、どちらも PASS にできるならしたい。
※Webhook を発行するトリガーとして、ステータスを利用しているため。
※最初は逆だったが、成果物取得で落ちてくるのが lastSuccessBuild のものだったため、更新があったときを PASS にしている。

※Zapier で tweet する際に改行がスペースに置換されてしまっている。
※改行のまま tweet したい。

2017年1月30日月曜日

Zapier + RSS で Twitter のツイートの音声読み上げをやってみたけど微妙だった話




ということで、Slack ではないですが Twitter のツイート読み上げをやってみました。
(Slack でも outgoing webhook があるので Zapier で繋げられるはず)

が、結論を先に書くと
求めていたものとは違うものでした。

Twitter → RSS → 音声読み上げ
なぜこの構成にしようと思ったのか?
音声読み上げは PC 上でやっても良かったのですが、スマホで読み上げてくれたら XFD 的な感じで通知にも使えるしいいかなぁと思ったからです。
(あと、PC は作業用BGMとかかけてたりするとフロア全体には流せないですしね)


Zapier の設定
Zapier はサービスとサービスをつなげるハブサービスです。
以前書いた「ブログズミ: CIサービスの結果を Twitter に投稿する」に細かいことは書いてあるのでそちらも参考にしてください。

今回は Twitter → RSS の設定です。


まだトライアル版の期間内でしたので、フィルターも設定してみました。


ちなみに、無料プランだと 2 step までしかできないです。(うーん、ずるいなぁ。フィルター絶対欲しくなるもん…


これで設定は完了。

RSS Reader で読ませてみる
今回使ったアプリは WalkReader です。
こんな感じに読み上げてくれます。(ブログでは声出ませんけど…)



結果
本当に欲しかったのは、とあるトリガー(今回は Twitter のつぶやき)に対して
(ある程度)リアルタイムに反応して、自動でその内容を喋ってくれるもの」でした。
で、出来上がったのは
5分~15分の更新頻度で、手動でその内容を喋ってくれるもの」でした。
全然ダメでした…
(まぁ、サービス連携を覚えたので色々やってみたかったんです。ダメでしたけど…)


まず、RSS Reader 側は自動で読み上げてくれるようなものを作ったり、既にそのようなものがあったりすると思います。
なので、解決できなくもないのですが、
Zaiper の更新頻度が有料プランでも "5分" であること、今回選択した RSS では受け側も常にポーリングしている必要があることなど、ちょっと下調べ不足でした。

つづく・・・
読み上げは個人的にやってきたいことの1つでもあるので、今後もいろいろ試していこうと思います。

では。

2017年1月11日水曜日

CIサービスの結果を Twitter に投稿する

あけましておめでとうございます。本年もよろしくお願いしますm(__)m

さて、今年は酉年ということなので
新年一発目は「鳥」繋がりで、CIサービスと Twitter の連携をやってみたいと思います。



とはいえ、このネタは二番煎じでございます。

ほぼこちらの記事を参考にしております。
が、この記事ではちゃんと成功するところまでやってみました

では、(上記記事に書いてあることもありますが)詳しく説明をしていきます。

Webhook Notification + Zapier + Twitter
CIサービスでは、E-MAIL の他に Slack や HipChat などの Notification に対応しているところがほとんどですが、Twitter をサポートしているものがなかったため(※)、大抵のCIサービスで利用可能な Webhook を使って連携をさせます。
そして、Webhook と Twiiter を繋ぐ役割を担うのは、 Zapier です。



Zapier は複数サービスを連携するサービスの1つで、この手のサービスで有名なのは IFTTT だそうです。
今回 Zapier を選択したのは、参考記事にもあるように Webhook を使うためです。

また、今回 CI サービスには Travis CI を使用します。理由はメインで使っている CI サービスだから。
(他の Webhook Notification に対応した CI サービスでも同様に連携することができます。)


それでは早速連携の設定をしていきましょう。

※ iutest で使用している CIサービスのドキュメントを確認。その他、検索しても出てこないので多分ない

MAKE ZAP!
まずは、Zapier にサインアップします。


サインアップしたら、右上の「MAKE A ZAP!」ボタンを押して連携を作ります。


最初にトリガーになるアプリケーションを選択します。
今回は Webhook を使うので検索ボックスに Webhook といれて選択。


続いて、トリガーは「Catch Hook」を選択して、「Save + Continue」を押します。


次はオプション設定になります。今回は特に設定する必要がありませんので、空のまま「Continue」を押します。


これでトリガーの設定としては完了です。Webhook URL が生成されているので、これを CI サービス側から叩くことになります。
(この URL は後から確認できるので必要なときにコピーしにいきましょう)

ここでは、さらに Webhook のテストも行います。
テストページはスキップもできますが、ツイート内容を設定するときに Webhook の payload の内容を利用したいので、ここで一度テストしておきます。

Travis CI が Webhook Notification で送ってくる payload は公式ドキュメントから確認でき、 json フォーマットのサンプルが Gist からダウウンロードできるので、それを取得します。
(ここで実際に Travis CI から Webhook しても問題ありませんが、まだ機能していないのに Webhook 通知を .travis.yml に入れるのは嫌な方は以下のように curl で擬似的に送信します。)
ダウンロードしたら、gistfile1.json の先頭と末尾を以下のように少し編集します。
{
"payload": {

~~~~~~~~
   略
~~~~~~~~

}
}

編集したら、以下のように curl で送信します。
curl -v -X POST -d @gistfile1.json https://hooks.zapier.com/hooks/catch/ほげほげ

送信が成功したら、Zapier の「OK, I did this」ボタンを押します。

少しすると以下のテスト成功画面になります。



これでトリガーアプリケーションの設定は終わりです。「Continue」を押して次に進みましょう。

次はアクションアプリケーションの設定をしていきます。

まず、アクションアプリケーションに Twitter を選択します。


次に、アクションを選択します。今回は単純にツイートするだけなので「Create Tweet」を選択します。


続いて、アカウントを選択します。まだ Zapier と Twitter のアカウント連携をしていない場合は、「Connect a New Account」ボタンから連携を承認します。


最後に、ツイートする内容を設定します。



Message の右上にあるボタンを押すと、Webhook のパラメータ候補が出てきます。
Webhook のテストで送った payload の要素が選択できるようになっているはずなので、お好きなメッセージを入力してください。
編集できたら、「Continue」ボタンを押してください。


最後に、ZAP を ON にしたら完成です!





Travis CI の設定
Travis CI 側の設定でやることは1つだけで、Webhook Notification の設定を .travis.yml に追加するだけです。
ただし、Webhook URL をそのまま載せてしまうと誰でも URL を叩けてしまうので、暗号化をします。

やり方は簡単です。以下のコマンドを .travis.yml のあるディレクトリで実行すれば、勝手に設定を追加してくれます。
(travis コマンドはインストールしておいてください。)
travis encrypt "<webhook url>" --add notifications.webhooks
勝手にフォーマットされるのが気に食わない場合は、 --add オプションなしで実行すると暗号化された文字列がコンソールに出力されますので、それを以下のように .travis.yml に追記してください。

notifications:
  webhooks:
    secure: ほげほげ
    on_success: change # default: always
    on_failure: always # default: always

デフォルトだと、on_success/on_failure ともに常に通知になってますので、お好みで変更してください。

結果

ツイートできました!!

今回は以上です。では。