読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

イベント情報の横断取得 Web & API

ASP.NET Azure Web .NET Visual Studio C# JavaScript 新サービス

Doorkeeper, ATND, connpass のイベントを横断して一覧表示する WebWeb API を公開しました。ソースコードも公開してます。(過去サイト「IT勉強会ですよ (itcal.jp)」は忘れてください…(◞‸◟))

events.clock-up.jp

Web API 仕様

Web API は自由に利用できるよう公開しています。クロスオリジン許可しており、どこからでも利用できるので良識の範囲内でご利用ください。

この Web API を利用した Web サイトについても後述しますが、実のところ、Web サイト本体よりもこの Web API 自体の存在が大事だと自分は考えています。

この API 公開により、誰でも自由にフロント構築ができるわけです。
僕はフロントの専門家ではないので、正直なところ他のセンスの良い誰かにカッコいいフロントを構築して欲しい…!! 欲しい…!! モバイルアプリとか…!! 欲しい…!!

Web API リクエストとレスポンスのサンプル

以下のような感じに取得できます。
http://events.clock-up.jp/api/events?client=sample&area=tokyo&date=20170421

{
  "result": "ok",
  "message_for_developer": "",
  "events": [
    {
      "id": "doorkeeper_58662",
      "url": "https://osslabo.doorkeeper.jp/events/58662",
      "title": "システム運用の改革・改善の本質とは? ~自動化やツール導入の前にすべきこと~",
      "starts_at": "2017-04-21T09:30:00+09:00",
      "ends_at": "2017-04-21T10:30:00+09:00",
      "place_name": "愛宕山弁護士ビル 会議室No.5",
      "address": "東京都港区愛宕1-6-7",
      "lat": 35.66486,
      "lng": 139.74927,
      "area": "tokyo",
      "areaid": 13,
      "capacity": 0,
      "going": 18,
      "waiting": 1
    },
    {
      "id": "atnd_86185",
      "url": "http://atnd.org/events/86185",
      "title": "【4/21開催】IT製品・サービスの英語プレゼン講座(エパノ プログラミング スクール)",
      "starts_at": "2017-04-21T09:30:00+09:00",
      "ends_at": "2017-04-21T17:30:00+09:00",
      "place_name": "エパノ プログラミング スクール(西新宿)"
      ....
      ....

イベント横断閲覧サイト

こっちが Web サイトの本体です。

events.clock-up.jp

Doorkeeper, ATND, connpass のイベントを横断して閲覧できます。IT関連に絞っていないので、ユーザ設定で適宜NGワードを設定してご利用ください。

※昔作った類似サイト「IT勉強会ですよ (itcal.jp)」は閉鎖しました…(◞‸◟)

ソースコード

github.com
Fork して改造するなり PR 送るなり、よしなに。

経緯

昔、「IT勉強会ですよ (itcal.jp)」というクソみたいなサイトを作り、完全に放置してデータが死んでました。大変に申し訳ない。

f:id:kobake:20170422102254p:plain:w150

実はあれは最初は Rails の勉強がてらに作り、触っているうちに「Rails はクソだ、やってられん」「よし、CakePHP に移植だ」「CakePHP はクソだ、やってられん」「うーもう俺はダメだ、メンテしきれん」「ASP.NET MVC という Web フレームワークがけっこう良いぞ」「よし、ASP.NET MVC でゼロから作り直すぞウオー (clock-up-events の誕生)」「やったーーこれはメンテしやすいぞ」「やはり C# は最高だ」「やはり Visual Studio は最高だ」「これでやっていく」という経緯があります。

ついでにいうと「しかし俺は飽きっぽいから今回もメンテを続けられるのだろうか」「俺が折れても他の人がいじれるように当然ソースコードはオープンにする」「ついでに Web API を公開しといて誰でもフロントを作れるようにしておこう」という過去の反省からのカイゼンのトライを今回は含めました。

構成

f:id:kobake:20170422130738p:plain

実は Web API 部分と Web 本体部分は分離可能で、Web API についてはデータベース使ってないです。どこかのタイミングで構造(DNSも含め)を切り離したい、かも。

Web API 利用サンプル

以下は JavaScript による利用サンプルです。

var url = 'http://events.clock-up.jp/api/events?client=sample&area=tokyo&date=20170421';
fetch(url).then(function (response) {
    return response.json();
}).then(function (json) {
    if (json.result !== 'ok') {
        console.log(json.result);
        return;
    }
    json.events.forEach(function(event){
        console.log(event.starts_at + " " + event.title);
    });
});


以下のような実行結果が得られます。

2017-04-21T09:30:00+09:00 システム運用の改革・改善の本質とは? ~自動化やツール導入の前にすべきこと~
2017-04-21T09:30:00+09:00 【4/21開催】IT製品・サービスの英語プレゼン講座(エパノ プログラミング スクール)
2017-04-21T10:00:00+09:00 『仕様書インスペクション 実践編』【手戻りを防ぐ実践的なレビュー技法】4月21日(金)ヒンシツ大学
…
…

ASP.NET MVC もっと普及してほしい

本記事の「構成」でも触れましたが、今回のサービスは ASP.NET MVC で構築し、Azure に設置しています。

Web系の人、ASP.NET を意外なほど触ったことないみたいですが、これ本当に最高なので機会があれば是非触って欲しいです。「どのように最高なのか」についてはここで語るには長くなるので別の機会にでも。

というか触る機会が実はなかなか見つからない気もする(どこもかしこも Rails ばかりだクソー)ので僕が機会を作りますね。日本C#ユーザー会 - connpass というグループでちょこちょこと ASP.NET 関連のイベントを開いていく予定です。よろしくお願い致します。

しかしながらですね、いきなり ASP.NET MVC という、初めての人によっては抵抗のありそうな技術のイベントに足を運んでもらうことを期待するのもおこがましいのでですね、まずは「Webフレームワークの品評会」的なイベントを開こうと思っています。「Ruby on Rails」「CakePHP」「FuelPHP」「ASP.NET MVC」「Django」「Express」「Play Framework」…挙げればキリがないのですが、それぞれの良いところを発表し合うイベントの開催を考えてます。横断勉強会コミュニティ - connpass で5月か6月に開く予定。

とにかく「ASP.NET MVC はいいぞ」と俺は言いたい。
プラットフォームが自由とか不自由とかどうでも良いんですよ。「使いやすい」ことが大正義。

それはそれとして、最近は Microsoft.NET Core 等に注力しており、自由な世界への歩み寄りが目覚ましいです。どうか Microsoft に対する変な思い込みを捨てて欲しい。というか捨ててもらうために俺は布教活動がんばるぞ~~~~

おまけ1

ちなみにですが、かの有名な Stack OverflowASP.NET MVC で構築されてますよ。

おまけ2

個人的に ASP.NET MVC の Tips をまとめたサイトを運用しています。
aspnet.clock-up.jp

おまけ3(告知)

早速ですが「Webフレームワーク品評会」の準備を進めます。ご登壇いただける方いらっしゃいましたらご連絡いただけると嬉しいです!
qiita.com

});