38
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

社内エンジニアのアウトプットを促進するため、各スタッフのQiita投稿/ストック数をChatworkに送りつけるボットを作る

Last updated at Posted at 2014-08-01

前提

僕の所属している会社では、Qiita Organizationに企業登録してます。理由としては、アウトプットの奨励であったり、企業ブランディングであったりです。まぁそれは置いといて。

Qiita Organizationで、なにができるかというと、単純に会社に所属しているメンバーを追加することぐらいで、特別な機能があるわけじゃないんですが、社内のエンジニアにQiita投稿を楽しんでやってもらえるキッカケ作りとして取り組んでます。

やりたいこと

というわけで前置きが長くなりましたが、投稿モチベーション維持のため、社内エンジニアのQiita投稿数/獲得ストック数を毎日クロールして、Chatworkのグループに送りつけることで、Qiitaスペックの見える化をしたい。

クロール対象ページ

使うもの

kimonoを使って、WebページをAPI化

一番面倒くさいの、ページから各ユーザ名と数値を取得する部分。だけど、今はkimonoっていう凄いやつがいるので使ってみます。こいつは、指定したWebページを勝手にクロールして、JSON形式とかでリクエストできるAPI化してくれちゃいます。便利。

ブックマークレットで該当ページを編集

言葉で説明すると、なんか面倒っぽいけど、実際は5分もかからずいけます。

メンバー_-_株式会社ベーシック___Qiita.png

該当ページでブックマークレットを実行し、編集画面にします。

メンバー_-_株式会社ベーシック___Qiita 2.png

ユーザ名のリストがほしいので、ユーザ名の場所をおもむろにクリックします。ユーザ名の箇所全体が黄色にマーキングされるので、チェックアイコンをクリックして、全要素を追加してください。左上が要素の数表示されます。

そして左上に「user」というプロパティ名を入力します。

メンバー_-_株式会社ベーシック___Qiita 3.png

今度は、右上の「+」ボタンを押して新しいフィールドを設定します。

メンバー_-_株式会社ベーシック___Qiita 4.png

続いて、投稿数とストック数を同様にクリックします。あとは保存すればOK。クロールするタイミングも柔軟に設定可能。今回は1日に1回にしました。

PHPでAPIアクセスして、chatworkのAPIで投稿

本当はHerokuとかでやりたかったんですが、計画実行のクレカ登録とか面倒だったので、余っているサーバのcrondで動かすことにしました。超絶面倒くさいので、色々糞なコードですが。

qiita.php
<?php
// kimonoで作ったAPIのURL
$uri = 'https://www.kimonolabs.com/api/example?apikey=hogehoge';
$json = json_decode(file_get_contents($uri));

// Chatworkに投稿するためのメッセージ作成
$message = <<<EOM
[info][title]今日のQiita[/title]
今日のQiitaの投稿数とストック数だよ。
EOM;

$topStock = 0;
$topUser = '';
foreach ($json->results->collection1 as $val) {
	$val->stock = htmlentities($val->stock, null, 'utf-8');
	list($posts, $stock) = explode('|', str_replace(array(' ', '&nbsp;', 'posts', 'post', 'stocked', "\n"), "", $val->stock));
	$message .= $val->user->text . " : " . $posts . "投稿 / " . $stock . "ストック\n";
	if ($topStock < $stock) {
		$topStock = $stock;
		$topUser = $val->user->text;
	}
}

$message .= <<<EOM

現時点のトップは、{$topUser}です
[/info]
EOM;

system('curl -X POST -H "X-ChatWorkToken: 【ChatworkのAPIキー】" -d "body=' . $message . '" "https://api.chatwork.com/v1/rooms/【ルームID】/messages"');

これで、指定チャットにたいして投稿できます。あとはcrondで1日1回設定すればOK。

スクリーンショット 2014-08-01 16.02.43.png

38
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?