vdeep

*

vdeepはプログラミング、IT、Web技術、ライフハックの事などなどを管理人okutaniがつぶやくブログです。月間11万PV〜。

PHPでSlackに「クリームたいやき食べたよ」とメッセージ送るアプリつくった

      2017/01/31

LINEで送る
Pocket

こんにちは、okutani(@okutani_t)です。先日、前の会社の同期4人で飲んでました。そう、僕ら大好き鳥貴族!

ワイワイガヤガヤやってる中、こんな会話に。

美容師さんのチャット画像。
最近、健康状態が悪い

okutaniのチャット画像。
ほうほう

美容師さんのチャット画像。
この間の健康診断も引っかかってしまった

okutaniのチャット画像。
ほうほう

美容師さんのチャット画像。
フ◯ミマに売ってる『クリームたいやき』を毎日食べてしまう。。1日1個必須。。

okutaniのチャット画像。
それはやばい

というわけで、同期がこれ以上クリームたいやきを食べ過ぎないように、クリームたいやきを食べたらSlackに報告する『クリームたいやきチェッカー』アプリを作りました。

酔った勢いで帰ってそのまますぐ作ったので、けっこうてきとうです。というかシンプルすぎて、これで記事書いていいのかってレベルです。

まったくやり方がわからない状態で調べてみると、Slack Web APIってのを使えばめっちゃかんたんにPHPからSlackにメッセージが送れるとのこと。

なんだかんだ作り始めて1時間で公開できました。めっちゃかんたんです。

というわけで、僭越ながら作り方を載せておきます。では本題に入りましょうー。

スポンサーリンク

Slack API KEYを取得する

まずはSlack API KEYを取得します。ここはけっこう取得方法がわかりにくかったのでスクショ多め。

LINKSlack Web API | Slack

slack-web-api2

すこし下にスクロールして「Generate test tokens」をクリック。

slack-web-api3

Create token」を選択。

slack-web-api4

Slackで使っているアカウントのパスワードを入力。

slack-web-api5

Confirm」をクリックするとtokenが表示されます。メモしておきましょう。

slack-web-api6

tokenで接続確認をおこなう

このtokenを使って接続確認をしておきます。別にやらなくてもいいですが、まあ一応。

次のコマンドをターミナルで実行。

$ curl -XPOST "https://slack.com/api/auth.test?token=&pretty=1"

このように、okのパラメーターがtrueなら通信成功です。

slack-web-api7

『クリームたいやきチェッカーアプリ』を作る

index.phpに次を記述。

<?php
  if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $slackApiKey = 'ここにslackのAPI KEY';
    $text = 'すまん...... 食っちまった...... by◯◯';
    $text = urlencode($text);
    $channel = '%23cream-taiyaki';
    $url = "https://slack.com/api/chat.postMessage?token=${slackApiKey}&channel=${channel}&text=${text}&as_user=false";
    file_get_contents($url);
echo <<<EOM
<script type="text/javascript">
  alert("slackに送信したよー");
</script>
EOM;
  }
?>

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description"  content="クリームたいやきを食べたか監視してslackに送信するアプリ。" />
    <title>CREAM TAIYAKI</title>

    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.4.0/animate.min.css">
    <style>
     h1,
     p {
       text-align: center;
     }
     p {
       font-size: 1.4em;
     }
     .mb30 {
       margin-bottom: 30px;
     }
     #cream_taiyaki {
       box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.7);
       cursor: pointer;
       transition: ease .3s;
     }
     #cream_taiyaki:hover {
       opacity: .8;
     }
    </style>
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <form id="my_form" method="post" action="">
      <div class="container">
        <h1>クリームたいやきチェッカー!</h1>
        <p>click me!</p>
        <p class="mb30">↓</p>
        <img id="cream_taiyaki" class="wow bounce mb30 img-responsive center-block img-circle infinite" data-wow-duration="2.0s" src="cream-taiyaki.jpg" alt="クリームたいやき">
      </div>
    </form>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js"></script>
    <script>
     $(function(){
       // wow.js
       new WOW({
         mobile: false
       }).init();
       // cream taiyaki click
       $("#cream_taiyaki").on("click", function(){
         if (confirm("本当に食べた?slackに送信するよ?")) {
           $("#my_form").submit();
         }
       });
     });
    </script>

  </body>
</html>

『クリームたいやきを食べたよ』ボタンをクリックするとSlackにメッセージ投げるだけのアプリです。

$slackApiKeyにAPI KEY入れてください。あとのスタイルはてきとうです。なんかanimate.cssとwow.jsで無駄に動き出してますけど、気にしないでください。

こんな感じになりました。

slack-web-api8

SlackにPHPを使ってメッセージ投げる方法は「PHPでSlackに通知を送る – Qiita」あたりを参考にしました。

とりあえず適当に作っただけなので、エラーチェックとかなんもしてません。ちゃんとやりたかったらtryとか使えばいいかと思います。

僕のGitHub(php-code/cream-taiyaki at master · okutani-t/php-code)にも上げておいたので参考にどうぞ。

これで同期の健康が良くなればokutaniは嬉しいです……!

slack-web-api9

問題なのは、誰でも偽造して送れちゃうところですね。Formにinputタグ入れてプルダウンとかラジオボタンとか入れれば、誰が送ったとか処理できるかと、いやもう飽きたからやらないけど。

おまけ: ちゃんとしたAPI KEYが送られてきた?

なんかこんなメールがきました。新しいAPI KEYにしろってことですかね……

slack-web-api10

これをやらなくても最初に取得したtest tokenで使えてるので、代えないといけないのかは謎です。分かったらまた追記します。

SlackとPHPの連携の際の参考にしてください。

この記事が気に入ったら
いいね ! しよう

Twitter で
LINEで送る
Pocket

okutani (@okutani_t) のヒトコト
Slackはいろいろと便利な使い方ができそうですねー。PHPで処理走らせた結果をSlackに送信とか、アイディア次第では神ツールが作れるかも。

 - PHP

スポンサーリンク

PC用AdSense

PC用AdSense

Share
  • このエントリーをはてなブックマークに追加

  こちらの関連記事もどうぞ

[PHP]はじめてのSmarty導入手順まとめ

こんにちは、okutani(@okutani_t)です。今回はPHPのテンプレー …

[WordPress]記事内で使える『連載記事一覧』機能をPHPで作ってみた

こんにちは、okutani(@okutani_t)です。ブログを書いていると、連 …

[PHP]Composerを導入&はじめてのパッケージインストールまで

こんにちは、okutani(@okutani_t)です。『Composer』とい …

PHPMailerを日本語で便利につかう「NPHPMailer」作ってみた

こんにちは、okutani(@okutani_t)です。PHPでメール機能を実装 …

[PHP]自作ライブラリをComposer化&Packagistの登録方法

こんにちは、okutani(@okutani_t)です。本記事では、以前作った「 …

CentOS7にPHP5.6を導入する方法

こんにちは、okutani(@okutani_t)です。本記事ではCentOS7 …

MacにHomebrewでPHP, Apache, MySQLを導入する

こんにちは、okutani(@okutani_t)です。MacにはデフォルトでP …

WordPress投稿ページにPHP利用→ショートコードを使おう!

こんにちは、okutani(@okutani_t)です。WordPressではP …

CentOS7+nginxでPHPを利用する方法(PHP-FPM)

こんにちは、okutani(@okutani_t)です。前回の「CentOS7に …

vdeepのトップページへ戻る画像です。風船の形をした島を女の子が掴んでいます。