New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zen.coderdojo.com とその API の調査 #330

Open
naopontan opened this Issue May 22, 2018 · 49 comments

Comments

Projects
None yet
3 participants
@naopontan
Copy link
Contributor

naopontan commented May 22, 2018

背景

#314 からの派生です。

zen.coderdojo.com とその API の調査
zen.coderdojo.com って何だ? → 本家っぽい
zen.coderdojo.com にアクセス API に関するリンクが無いか一通り見てみる
見当たらないので zen coderdojo api でググってみる。 https://zen.coderdojo.com/documentation#/api を発見
アカウントがあると情報量が増えそうなのでアカウント作ってみる ← 今ここ
簡単なサンプルと sandbox 的な場所があれば実際に動かしてみたほうが理解早そうだけど、あるかなー? って感じで調査中


Zen アカウントの方で アクティブ状態を持っているらしいので、API 連携し負担軽減を目指したい。

例えば「一時的に Dojoが休止となった場合、Dojo管理者が Zen 上でステータスを非アクティブにすれば、 coderdojo.jp でも即反映される」と中間の手間が省けて嬉しい。

上記も含めて実現可能かを調査する。

関連issue

#314
#310

TODO

  • API に関する guide や reference が無いか調査
  • アクティブ/非アクティブの取得APIが用意されているか?の確認
    • zen.coderdojo.com のアカウント作成 & 道場作成
  • 用意されているのであれば、実際に動かして確認する
  • 用意されていなければ、APIとしてはどんな機能が用意されているのか?を軽くレポートする
  • coderdojo.jp のDBに Zen の情報を取り込む時、どんなアプローチがあるか? をいくつかまとめる
  • /docsディレクトリに作成したドキュメントを置く

@naopontan naopontan self-assigned this May 22, 2018

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 22, 2018

初めて issue 立てたけど、こんな感じで良いのかしら...

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 22, 2018

まずは 「Dojo管理者としてアクティブ/非アクティブの操作」をしてみたいが、テスト環境みたいなのはあるのだろうか?... 🤔

もし、無いとしたら実際にDojo管理者として登録して、登録時のコメント欄に「API連携のテストしたいので、登録しちゃいますー」的な事を書けば良いのか... 🤔

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 22, 2018

https://zen.coderdojo.com/documentation#/ を眺めてると
id, userId, dojoId などが登場してくる。各々の意味と、具体的な値が知りたいなー。
さて、どうしよう 🤔
ま、もうちょっと眺めてみる。

....

個人アカウント作ったので userId と思われる値で試しにコールしてみる。

$ curl -X GET --header 'Accept: application/json' 'https://zen.coderdojo.com/api/2.0/badges/user/35307958-77da-41da-af7b-afd4cdbf6bbd' {"statusCode":401,"error":"Unauthorized","message":"Missing authentication"}

認証が必要っぽい。 API で認証か、、、この辺よく分かってないので調査続行。

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 22, 2018

API Document のページがシンプルすぎてどうやっていいのかわからない。少し手詰まり感が出てきた。
色々とググっても有益な情報を発見できず 😿

https://zen.coderdojo.com/documentation#!/api/getApi20Countries
のサンプルは手元で実行できた。

他にも以下などは認証不要で実行できた。

https://zen.coderdojo.com/documentation#!/api/postApi20CountriesPlaces
を試してみるも Internal Server Error なのでサーバ側の問題なのでは...それともパラメータが悪いのかなぁ

$ curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
>   "search": {
>     "countryCode": "AS",
>     "search": "okinawa"
>   }
> }' 'https://zen.coderdojo.com/api/2.0/countries/places'
{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"}[

countryCode は他にも JP って入れたりしたけど変わらず、色々試して2文字ってのは判明した

$ curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
  "search": {
    "countryCode": "392",
    "search": "okinawa"
  }
}' 'https://zen.coderdojo.com/api/2.0/countries/places'
{"statusCode":400,"error":"Bad Request","message":"child \"search\" fails because [child \"countryCode\" fails because [\"countryCode\" length must be 2 characters long]]","validation":{"source":"payload","keys":["search.countryCode"]}}

こんな手探り状態だと、埒があかないなー。

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 22, 2018

CoderDojo Foundation が運営する CoderDojo Global Slack があり、その中に #zen チャンネルというものがあるのですが、そのチャンネルには CoderDojo Zen の開発者がいるので、そこで直接開発者に質問することはできそうです! 📮 🏃💨

CoderDojo Global Slack
https://coderdojo.com/coderdojo-global-slack/

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 22, 2018

ありがとうございます 😀 Slack も登録してみます。
今は WebAPI の勉強をしたり https://forums.coderdojo.com/topic/123/api を眺めたりしてました。

... 英語ですね 🇺🇸 いつもならここで怯むのですが、頑張って進んでみます

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 22, 2018

うーん、でもアレですね。確かに dojos/:id に適当にID入れても返ってこないし、search してみても

{
  "statusCode": 403,
  "error": "Forbidden",
  "message": "Forbidden"
}

が返って来て、なんか挙動がおかしそうですね🤔💭

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 22, 2018

今日はそろそろ終業時間ですが、現時点で分かっていることを明日の朝会後に共有して、今後の実装方針についてもう一度模索してみると良さそうですね ;) いかがでしょうか?

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 22, 2018

はい。今日の件は整理しておきます。
朝会後、オッケーです 🙆

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 22, 2018

はい! では明日また! お疲れ様でした〜 😆 ♨️

@nalabjp

This comment has been minimized.

Copy link
Contributor

nalabjp commented May 23, 2018

昨日ちょっと触ってみて、日本のdojo一覧と思われるレスポンスは取れることが分かったので後で詳細コメントしますね😉

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

nalabjp さん、ありがとうござます。


今は、仮の道場を登録する場面で、どうしても「会場の詳細」が OK になってくれないので、問い合わせを投げようかと準備中です。
(「会場の詳細」で全ての項目を入力しているのに、なんでだろ 💭

fireshot capture 10 - i coderdojo zen - https___zen coderdojo com_dashboard_start-dojo_review

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

拙い英語で問い合わせフォームから質問投げました。
とりあえず作成中の道場は Pending applications と表示されています。
このステータスが取れれば良いはずので、調査進めます。

@nalabjp

This comment has been minimized.

Copy link
Contributor

nalabjp commented May 23, 2018

@naopontan
https://zen.coderdojo.com/documentation#!/api/postApi20CountriesPlaces
👆のAPIが正常なのかどうかはわからないんですが、
日本で登録されているdojoの一覧らしきものは👇のAPIでそれっぽいのが取れました。
https://zen.coderdojo.com/documentation#!/api/postApi20Dojos

パラメータを指定しないと全件取得するっぽい(かなり遅い)んですが、
パラメータに以下を指定すると日本だけに絞り込めていそうです。

{
  "query": {
    "countryName": "Japan"
  }
}

レスポンスを全て精査したわけではないので、そのあたりの確認はお願いできればと思います。

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

お、たぶん stage っぽい?

パラメータを指定しないと全件取得するっぽい(かなり遅い)んですが、

@nalabjp さんのクエリのキャッシュが効いたのか、僕の方はほぼ一瞬で取得できました ;)

取得パラメータのサンプル
  {
    "entity$": "-/cd/dojos",
    "id": "3a1ef147-d9e7-4398-8c36-7ddf7036e343",
    "mysqlDojoId": null,
    "dojoLeadId": "697c1745-e2ea-4ea7-982f-81852a731275",
    "name": "Maebashi, Gunma",
    "creator": "25cc9c31-eff5-4f9e-92ae-cb87702165c5",
    "created": "2016-10-09T02:16:00.263Z",
    "verifiedAt": "2016-10-17T13:08:18.974Z",
    "verifiedBy": "d22d7ac3-acaf-4ba3-a467-cdf337ef4bc1",
    "verified": 1,
    "needMentors": 1,
    "stage": 3,                 # <== これかな? 🤔💭
    "mailingList": 0,
    "alternativeFrequency": "first",
    "country": {
      "countryName": "Japan",
      "countryNumber": 392,
      "continent": "AS",
      "alpha2": "JP",
      "alpha3": "JPN"
    },
    "county": {},
    "state": {},
    "city": {},
    "place": {
      "nameWithHierarchy": "Maebashi, Gunma Prefecture"
    },
    "coordinates": "36.362198485216354, 139.12779092788696",
    "geoPoint": {
      "lat": 36.3813523,
      "lon": 139.0725053
    },
    "notes": "

Suggested Notes:
\n
\nPlease bring:

\n\n
    \n\t
  • A pack lunch.
  • \n\t
  • A laptop. Borrow one from somebody if needs be.
  • \n\t
  • A parent! (Very important). If you are 12 or under, your parent must stay with you during the session.
  • \n
\n\n

\n", "email": "maebashi.jp@coderdojo.com", "website": "https://vtmacs003b.github.io/maebashi.jp/", "twitter": null, "googleGroup": null, "supporterImage": null, "deleted": 0, "deletedBy": null, "deletedAt": null, "private": 0, "urlSlug": "jp/maebashi-gunma-prefecture/maebashi-gunma", "continent": "AS", "alpha2": "JP", "alpha3": "JPN", "address1": "3-35, minamicho", "address2": null, "countryNumber": 392, "countryName": "Japan", "admin1Code": null, "admin1Name": null, "admin2Code": null, "admin2Name": null, "admin3Code": null, "admin3Name": null, "admin4Code": null, "admin4Name": null, "placeGeonameId": null, "placeName": "Maebashi, Gunma Prefecture", "userInvites": null, "creatorEmail": "**********@example.com", "taoVerified": 0, "expectedAttendees": null, "facebook": null, "day": 7, "startTime": "10:00:00", "endTime": "12:00:00", "frequency": "1/m" },
@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

@nalabjp ありがとうございます。私の手元でも確認できました。
@yasulab stageが該当するかどうかも含めて調査進めますね。

以下は先程登録した実験用の dojo 情報です。
作成途中なので pending 中です。 以下の値では stage は 0 になってます。

{"entity$"=>"-/cd/dojos",
 "id"=>"3d56b7c0-4db6-43cb-81e7-e6d554ee3012",
 "mysqlDojoId"=>nil,
 "dojoLeadId"=>"85d5d9a8-85fa-4d48-8e98-5ceaffb72878",
 "name"=>"sobe-test",
 "creator"=>"35307958-77da-41da-af7b-afd4cdbf6bbd",
 "created"=>nil,
 "verifiedAt"=>nil,
 "verifiedBy"=>nil,
 "verified"=>0,
 "needMentors"=>0,
 "stage"=>0,       # <= ここではゼロですね。pending は 0 ?  🤔💭
 "mailingList"=>0,
 "alternativeFrequency"=>"Occasionally",
 "country"=>
  {"countryName"=>"Japan",
   "continent"=>"AS",
   "alpha2"=>"JP",
   "alpha3"=>"JPN",
   "countryNumber"=>"392"},
 "county"=>nil,
 "state"=>nil,
 "city"=>nil,
 "place"=>nil,
 "coordinates"=>"{\"26.206813496187387\",\"127.69301891326904\"}",
 "geoPoint"=>{"lat"=>26.206813496187387, "lon"=>127.69301891326904},
... 以下、省略 ...

stage の値でグループ分けすれば何かしら見えてきそうです。
(stage じゃなければ他のフィールドに当たりつけてみます)

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

ここではゼロですね。pending は 0 ? 🤔💭

pending は "verified"=>0, っぽいですね。Verified されている上記 CoderDojo 前橋のサンプルだと 1 になっていたので 基本は Pending <=> Verified の2値かなという認識です 💭

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

CoderDojo Okinawa の stage ってどうなってますかね? 1 ですかね? 👀
https://zen.coderdojo.com/dojos/jp/okinawa-ken/okinawa-okinawa-prefecture/okinawa

screen shot 2018-05-23 at 15 12 16

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

私の権限では見れないようです。

zen 上では私は関わっていない状態でした (><)
「メンターとして」ボタンを押して関係性を持ったのですが、それでも ↑ の画面は見えないです 😓

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

もしかしたら「チャンピオンとして参加」ボタンを押せば画面が見えるようになるかもしれませんが、本当のチャンピオンのお断りとかが必要かと。

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

あ、API で CoderDojo Okinawa の情報を取得すると stage の値ってどうなってますかね? >< 💦

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

ゼロになってます...

  "name"=>"Haebaru at artisan",
  "creator"=>"8b7b4bd8-0e84-49c2-ac5a-a1a01cc85908",
  "created"=>"2016-11-18T02:15:11.458Z",
  "verifiedAt"=>"2016-11-22T14:16:55.476Z",
  "verifiedBy"=>"9c9ed75a-660f-4a2e-a92e-f267c161c34d",
  "verified"=>1,
  "needMentors"=>1,
  "stage"=>0,
@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

只今、データを眺めるスクリプト書いてます 📝

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

"stage"=>0,

なるほどなるほど。少なくとも 0〜3以上の4種類以上の状態が stage に保存されることは分かったので、恐らく stage: 4 という状態もありそうですね🤔CoderDojo 西成が既に非アクティブな状態にしているかどうかは未確認ですが、そうすると現状の CoderDojo 西成の stage の値も気になってきますね 👀

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

スクリプト

[naopontan@naopontan-MBP coderdojo.jp]$ cat hoge.rb
require 'json'

s = File.read('/tmp/zen-dojos.json')
array = JSON.parse(s, {symbolize_names: true})
array.each do |h|
  p h.slice(*%i[verified stage deleted taoVerified name])
end

puts "stage"
array.group_by {|x| x[:stage]}.each do |k, dojos|
  p [k, dojos.size]
end

puts "verified"
array.group_by {|x| x[:verified]}.each do |k, dojos|
  p [k, dojos.size]
end
[naopontan@naopontan-MBP coderdojo.jp]$
実行結果
[naopontan@naopontan-MBP coderdojo.jp]$ ruby hoge.rb
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Maebashi, Gunma"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"笠間 @ T-KNIT"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Ikebukuro,Tokyo @ Unique-inet"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Eniwa"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Okayama"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hibarigaoka"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"SapporoEast"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"SapporoEast"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"横瀬"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Kashiwa"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Konan, Okayama"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Miyoshi, Tokushima @ Microsoft"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tokushima @ Tokushima University"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kichijoji"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Hirakata@Shooby Doo Bop - English"}
{:verified=>0, :stage=>3, :deleted=>1, :taoVerified=>0, :name=>"Okayama Dojo"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Kitakami,Iwate"}
{:verified=>1, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Tatebayashi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kaita(海田)"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Minoh, Osaka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Akabane, Tokyo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Takizawa,Iwate@codeMo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Ibaraki @ Osaka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Miyoshi, Tokushima @ Microsoft"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Matsudo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kaizu, Gifu"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kai Ryuo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Daisen"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Shiun, Kagawa"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"AKIHABARA@good-works"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Ginowan, Okinawa@ Okigin S.P.O"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Tottori,Yonago@waraian"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Takadanobaba"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Tachikawa"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Tokushima @ Tokushima University"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Okudaisen"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nanki-Tanabe, Wakayama"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Momochi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Aizu"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Otemachi, Tokyo @ KOSEI"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tatebayashi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"花巻@花巻童"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tachikawa"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Mishima/Numazu @ Shizuoka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nisshin"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"miyoshi"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Kashiwa-Shounan"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Haebaru at artisan"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Kodaira"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Kotesashi @ Do it"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Ikoma, Nara"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kashiwa-no-ha"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"たてばやし"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Ochanomizu @ Tokyo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"真室川"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Izumi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nara, Nara"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Nagasaki"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nada, Hyogo"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Chichibu"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Nishi-kobe, Hyogo"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Anjo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"さつま"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"大手町"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kumano"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"竜ヶ崎ニ高"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"北九州"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kiyama @ Saga"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"くまがや"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Sango,Nara"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Shirakawa, Fukushima"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kurashiki, Okayama prefecture"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Fukuoka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tama Center @ Tokyo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"浦添(沖縄)"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Kashii, Fukuoka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Abeno, Osaka"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"天白,Nagoya,Aichi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tobe"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kure, Hiroshima @ MKD"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Minami-Kashiwa @ Reitaku University"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Minami Ikoma ( Ikoma-city, ) - Yamatokoriyama-city"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Fukuyama,Hiroshima"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Kodaira"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Atsugi, Kanagawa"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Aomori,Aomori@Leadingsystem"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Akaiwa"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Tsukuba, Ibrakaki"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Shizuoka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Awajishima,Hyogo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hodogaya, Yokohama"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Rikuzentakata @ Iwate"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"SembokuIzumi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Yachimata"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo Suwa-Lake"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Inagi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Daito,Osaka @Cowa’s"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tsuyama"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Shibata@TINKERKIDS"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"sobe-test"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kamakura"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tottori"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"World Ceo NetworkTOKYO CoderDojo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Masuda"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Wakaba Wakamatsu"}
{:verified=>1, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Asahikawa"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Ayashi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hirakata, Osaka"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Izumi"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Koga, Ibaraki"}
{:verified=>1, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Izumi"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Tokorozawa"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Mito, Ibaraki"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo Kagoshima(CoderDojo鹿児島)"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Sapporo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo Fukui"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Niigata"}
{:verified=>0, :stage=>1, :deleted=>1, :taoVerified=>0, :name=>"Shinjuku"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Shiojiri / 塩尻"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Himeji @  Himeji Dokkyo Satellite campus"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Kofu, Yamanashi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Saitama"}
{:verified=>0, :stage=>3, :deleted=>1, :taoVerified=>0, :name=>"Hachioji"}
{:verified=>0, :stage=>2, :deleted=>1, :taoVerified=>0, :name=>"CoderDojo Matsumoto"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Shibuya @ dotinstall"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kamiyacho"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tokyo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Itsukaichi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Akashi @ Akashi City Office"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo Matsumoto"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nagareyama"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Fushimi Kyoto @ Momoyama"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"hongo"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo Kashiwa-No-Ha"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Nishinomiya"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Shiroisi"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Suginami"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Akita"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nagaokakyo, Kyoto"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kitakobe,Hyogo@Risukeya-Lab"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hachioji"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Kobe, Hyogo"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Nakaniida"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Miyakojima"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hamamatsu @ Shizuoka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Mito"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Tome"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Okayama"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Takatsuki, Osaka @ EDGE"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Ichikawa,Chiba"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Wakaba Mitsuwa-dai"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Shimikitazawa, Tokyo @ OpenSource Cafe"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"荻窪道場"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Tokyo  Academic Park  International (draft name)"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Shinshiro"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Yokohama"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"tome,miyagi"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Azumino"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Okayama"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Nagatsuta"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Moriya"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kadena, Okinawa"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Nishinari Osaka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Utsukidai"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hommachi, Osaka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Higashiosaka, Osaka"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Sapporo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nippa, Kanagawa"}
{:verified=>0, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Uehonmachi,Osaka@"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Kesennuma"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Chofu"}
{:verified=>0, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Creatubles Japan Dojo"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Nakano @ amps"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kurume"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Uehonmachi, Osaka@Pygmalion school."}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Hanno"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Shinjyuku"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Sakai, Osaka @ Pangea Café"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Oharu, Ama, Aichi"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Umeda, Osaka, @ Cybozu"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Urayasu"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Sennan, Osaka"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Hitachinaka"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Wakayama"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Chiba"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Noda, Chiba"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Otsu, Shiga"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Hikari @ Coworking Space N-LABO"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Kanazawa, Ishikawa @ HackforPlay"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Ise"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kashiwa"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"名古屋、愛知"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Okinawa"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Owari"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Sendai"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Asahikawa City"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Shinjuku-ku @ ShinjukuKodomoshokudo"}
{:verified=>1, :stage=>2, :deleted=>0, :taoVerified=>0, :name=>"Fujisawa,Kanagawa@Minapark"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"NishiShinjuku @ JustSystems"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Toyohashi, Aichi @ Sozo Univ"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Namba, Osaka"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"Natori, Miyagi"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Tondabayashi, Osaka"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Ichikawa-Mama, Chiba"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Miyazaki"}
{:verified=>1, :stage=>0, :deleted=>1, :taoVerified=>0, :name=>"Nishinari"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"funabashi"}
{:verified=>1, :stage=>3, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo 吉賀"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Tarumi"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Yamagata"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Azumino"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Sakura"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"海老名"}
{:verified=>1, :stage=>1, :deleted=>0, :taoVerified=>0, :name=>"Kisarazu"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Yao, Osaka"}
{:verified=>1, :stage=>0, :deleted=>0, :taoVerified=>0, :name=>"Koganei, Tokyo @ Maehara Elementary School"}
stage
[3, 14]
[0, 66]
[1, 116]
[4, 10]
[2, 10]
verified
[1, 183]
[0, 33]
[naopontan@naopontan-MBP coderdojo.jp]$

色々といじってみたけど、何かやり辛い感じです。
ここまでいじって「日本の道場一覧の JSON 結果を CSV → GoogleSpreadseet に入れて、データ解析した方がグルーピングとかできて楽そう」と気づきました。
シートになっていれば後々も使えそうだし。

今は JSON 結果を CSV 化したのですが、私の CSV Editor が反応してくれなかったり、 Google Spreadsheets にアップしてみたが、慣れていなくちゃんとアップされたかの確認もままならない感じです 😢
使い慣れた Excel で確認した後、Excelファイルを Spreadsheet にアップしようと思ってます。

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Sendai"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Asahikawa City"}

お、これらは非アクティブな Dojo なので coderdojo.jp からも非表示になっている Dojo なんですよね。ということは stage: 4 が「非アクティブ」という認識で合っていそうです 👀

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

[naopontan@naopontan-MBP coderdojo.jp]$ ruby hoge.rb | grep "stage=>4"
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"SapporoEast"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Kotesashi @ Do it"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Fukuyama,Hiroshima"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"CoderDojo Kagoshima(CoderDojo鹿児島)"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Shiroisi"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Okayama"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Azumino"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Okayama"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Sendai"}
{:verified=>1, :stage=>4, :deleted=>0, :taoVerified=>0, :name=>"Asahikawa City"}
[naopontan@naopontan-MBP coderdojo.jp]$
[naopontan@naopontan-MBP coderdojo.jp]$ ruby hoge.rb | grep "stage=>4" | wc -l
      10

stage: 4 なデータは 10 個あるようです。
これで合っている。で仕様を決めて(も)良いのでしょうか?

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

すみません、言葉たらずだったかも。補足です。
考えが細かいかもしれませんが、「stage が 4 は非アクティブだ」と仕様を決めつけるラインをどこに持っていったらいいのかわからないので 🙏 💦
運営していて各道場の動きがある程度分かっていて経験則から、ほぼ間違いないの判断なのか、それともステータスを変更する画面の html を見て、フィールド名が stage となっていたら良しとするのか、、、zen のソースコードまで確認しに行くのか?、、、などなどです。

その辺りの感覚を知りたくて... 😅

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

stage が 4 は非アクティブ

札幌東と安曇野が stage: 4 になっている点は気になりますが、他の CoderDojo は現在非アクティブであることはそれぞれの Dojo 情報を個別に調べてみれば確認できるかなと思います また、基本的に非アクティブな Dojo は coderdojo.jp のトップページからも非表示になっているはずです 🔧 💨 ただし、ここは @yasulab が手動で対応しているので、漏れがある可能性はあります 🙈💦

ほぼ間違いないの判断なのか、それともステータスを変更する画面の html を見て、フィールド名が stage となっていたら良しとするのか、、、zen のソースコードまで確認しに行くのか?

はい、「ほぼ」間違いないという判断ですが、「ほぼ」を「確実」にしたい場合は、CoderDojo Global Slack で開発者に stage の意味について確認をとることもできそうですね 🌏

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

工数見積りや仕様策定、より正しい開発方針の模索のために必要な情報があればお気軽に聞いてもらえれば! 😸

@nalabjp

This comment has been minimized.

Copy link
Contributor

nalabjp commented May 23, 2018

Okayamaが2つあるのがちょっと気になったので調べてみたら"name":"Okayama"なdojoは3つあるんですねぇ。
残りの一つはstageが1でした。
OkayamaDojoを名乗るところが3回登録されているってことなんですかねぇ?🤔

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 23, 2018

"name":"Okayama"なdojoは3つある

2015年に Okayama が1つあったので、3つのうち1つはそれですね。共同代表者が中学生ということでも有名な 岡山 岡南 がもう1つで、最後の1つは気になりますね🤔💭

間違って2つ Dojo を作ってしまったケースは何度か見かけたことがあるので、もしかしたらそういったケースの1つかもしれません 😅

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 23, 2018

#330 (comment) の画面を見ると

  • In planning
  • Open, come along
  • Register ahead
  • フルアップ
  • 非アクティブ

と5つあり、以下のstage の種類と一致しますね。

配列の先頭がステータスコードで、2番めが道場数です。

stage
[0, 66]
[1, 116]
[2, 10]
[3, 14]
[4, 10]

coderdojo.jp の登録数が 140 なので、ステータスの 1, 2, 3 を足すと 116 + 10 + 14 でピッタリ 140
うーん、、、これでいいのかなぁ。また明日、調査続けます。

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

「zen に存在する道場は必ず jp サイトにも存在する」 は成り立たない...ですよね!?
おそらく、別々で管理されているので片方がなかったり、あっても情報が異なっている場合があるのかなーと。
この認識はあっていますか? 🤔

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 24, 2018

「zen に存在する道場は必ず jp サイトにも存在する」 は成り立たない...ですよね!?

はい、これは成り立たないですね 🙆 登録してからすぐに開催できる Dojo はほとんどなく、ある程度準備ができた段階で申請していただく流れになります💨

cf. 立ち上げる - CoderDojo Kata
http://coderdojo.jp/kata#startup

最後に、Dojo の承認さえ下りていれば、coderdojo.jp に Dojo 情報を掲載することができます。よければ下記フォームから申請していただけると嬉しいです😸
📮 CoderDojo Japan への Dojo 掲載申請フォーム

掲載申請や問い合わせについては1週間以内に対応できると思いますが、もし気になる場合は info@coderdojo.jp またはフォームからお気軽にご連絡ください。

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

zen と jp側の道場の紐付けをどうするかですね 🤔
パッと考えると dojos テーブルに zen 側の dojo_id を持たせる感じかなー ... 💭

あと、zen と jp側の道場の各々の情報(DBフィールド)で被りとかが無いかも気になります。
見比べてみて頭に入れてみます。

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 24, 2018

はい! 今回は Japan から Zen の情報を部分定期にでも取得する仕組みについて調べられれば十分ですので、実際の実装は後回しもしくは別 Issue が良いかなと考えています 😸 Description の方にも次の内容を書き足しておきました 📝

  • coderdojo.jp に Zen の情報を部分的に取り込むとき、どんなアプローチがあるか? をいくつかまとめる

☝️ ここまで達成したら、今回の API 調査は一旦完了としましょう

まとめられたアプローチを協議して、もし簡単に実現できそうであれば API 連携で非アクティブ #310 #314 を実装しても良いですし、もし難しそうであれば代替案の Suspension モデルでも良さそうです (もしくは別案が思い付けばそれも歓迎です! 😄)

API を通した Zen/Japan 間のシステム連携はいずれやりたいと思っていたので、もし今回 API 連携のアプローチを採らなかったとしても、今回の API 調査の結果は今後の事例で役に立つかなと考えています 💭

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

↑了解しました。

せっかくなので、先程調査した情報を↓に貼り付けておきますね。
(コメント書いている途中だった)


宜野湾道場をサンプルとして比較してみます。

zen の情報

{
  "entity$": "-/cd/dojos",
  "id": "901f6e5c-f3de-4bb6-9279-825505872b41",
  "mysqlDojoId": null,
  "dojoLeadId": "fff55e7e-6c5a-42a7-85ed-d4335fb19841",
  "name": "Ginowan, Okinawa@ Okigin S.P.O",
  "creator": "8ffd8c09-f254-4635-b0ce-9db02f64479a",
  "created": "2017-09-20T17:01:33.159Z",
  "verifiedAt": "2017-09-20T17:01:44.091Z",
  "verifiedBy": "d22d7ac3-acaf-4ba3-a467-cdf337ef4bc1",
  "verified": 1,
  "needMentors": 0,
  "stage": 1,
  "mailingList": 0,
  "alternativeFrequency": null,
  "country": {
    "countryName": "Japan",
    "continent": "AS",
    "alpha2": "JP",
    "alpha3": "JPN",
    "countryNumber": "392"
  },
  "county": null,
  "state": null,
  "city": null,
  "place": {
    "nameWithHierarchy": "日本沖縄県宜野湾市"
  },
  "coordinates": "{\"26.2695532\",\"127.73904620000008\"}",
  "geoPoint": {
    "lat": 26.269556,
    "lon": 127.73904100000004
  },
  "notes": "<ul>\n\t<li>場所:沖縄県宜野湾市真志喜1丁目13−16(株式会社おきぎんエス・ピー・オー2階会議室)</li>\n\t<li>費用:無料</li>\n\t<li>資格:7歳から17歳</li>\n\t<li>定員:10名</li>\n\t<li>持物:自分のパソコンがあれば持参して下さい。無い場合は道場のパソコンを利用することも可能ですが台数に限りが有るため、全員に行き渡らない可能性があります。<br />\n\t※作ったプログラムや作品を継続して保存したい場合、自宅でも学習したい場合はパソコンを持参することをオススメします。</li>\n\t<li>通常の日程:\n\t<ul>\n\t\t<li>9:00 - 9:30:初めての方向けDojoの説明</li>\n\t\t<li>9:30 - 11:30:プログラミング</li>\n\t\t<li>11:30 - 12:00:発表</li>\n\t\t<li>12:00 - 12:30:Dojo日記の記入と片付け</li>\n\t</ul>\n\t</li>\n\t<li>内容:\n\t<ul>\n\t\t<li>初心者向け:Scratch(スクラッチ)プログラミング</li>\n\t\t<li>中級者向け:ロボット初級プログラミング<br />\n\t\t※上級者向けメニューは準備中です。もう少々お待ち下さい。</li>\n\t</ul>\n\t</li>\n</ul>\n",
  "email": "coderdojo.ginowan@gmail.com",
  "website": "http://www.coderdojo-ginowan.com/",
  "twitter": "coderdojogwan",
  "googleGroup": null,
  "supporterImage": null,
  "deleted": 0,
  "deletedBy": null,
  "deletedAt": null,
  "private": 0,
  "urlSlug": "jp/ri4-ben3-chong1-sheng2-xian4-yi2-ye3-wan1-shi4/ginowan-okinawa-okigin-s-p-o",
  "continent": "AS",
  "alpha2": "JP",
  "alpha3": "JPN",
  "address1": "真志喜1-13-16(株式会社おきぎんエス・ピー・オー2階会議室)",
  "address2": null,
  "countryNumber": 392,
  "countryName": "Japan",
  "admin1Code": null,
  "admin1Name": null,
  "admin2Code": null,
  "admin2Name": null,
  "admin3Code": null,
  "admin3Name": null,
  "admin4Code": null,
  "admin4Name": null,
  "placeGeonameId": null,
  "placeName": "日本沖縄県宜野湾市",
  "userInvites": [

  ],
  "creatorEmail": "yama555net@gmail.com",
  "taoVerified": 0,
  "expectedAttendees": 10,
  "facebook": "coderdojo.ginowan",
  "day": 6,
  "startTime": "09:30:00",
  "endTime": "12:30:00",
  "frequency": "1/w"
}

coderdojo.jp の情報

=> [#<Dojo:0x00007fed48d39a40
  id: 106,
  name: "宜野湾 (沖縄)",
  email: "",
  order: "472051",
  description: "沖縄県宜野湾市で不定期開催",
  logo: "/img/dojos/ginowan.png",
  url: "http://www.coderdojo-ginowan.com/",
  tags: ["Scratch", "C-Style", "Mindstorm", "Java", "Swift"],
  created_at: Thu, 17 May 2018 10:47:02 JST +09:00,
  updated_at: Thu, 17 May 2018 10:47:02 JST +09:00,
  prefecture_id: 47>]
[4] pry(main)>
@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

coderdojo.jp に Zen の情報を部分的に取り込むとき、どんなアプローチがあるか? をいくつかまとめる

  • jp のフィールドで似たようなのは zen にあるか?
    • name は名前は同じだけど、jp は日本語、zen は英語で入ってたりする
    • email同じ情報 として良いはずだ
    • description は ... うーん、、今のところ不明としときます
    • logo は... zen には無いっぽい
    • urlwebsite と同一情報
    • tags は持ってないっぽい

「Zenの情報を部分的に取り込むアプローチは...」の前に「道場の情報は zen と jp のどちらで修正するの?」があると思います。

  • zen 側で全て済ませる → これは jp 固有の情報を既に持っているので難しそう
  • jp 側で全て済ませる → zen 側の情報をAPI経由で更新する → APIを駆使&機能あるか?の要調査

現状だと

  1. zen で登録して道場開設
  2. jp で登録してjp サイト掲載
  3. jp がメイン的な扱い(!?)になっているのでメンテが発生したら dojos.yaml を修正
    3.1. 気づいている人は zen 側の情報も更新

という感じだと思います。

... 引き続き、もうちょっと考えます ...

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

#330 (comment)
の問い合わせの回答が来ました。

We were we experiencing some technical issues this morning with the 'Start a Dojo' application form. The issue has been resolved now, so please try again. Hopefully it will work this time :)

今、登録したら出来ました。
(市町村のフィールドで naha を入力しても候補が出てこない不具合だった)

これで道場の情報がいじれる 😸

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

アプローチとしては「zen にしか無い情報は zen 上で修正させる」がいいと思います。今のところ。
ちょっと編集者の手間(この情報は zen と coderdojo.jp のどっちだっけ?って考える)を取らせちゃいますが。

連携させる場合はまずは Zenと紐づく情報 が必要ですね。
それが出来上がると cron などで定期的に情報を取りにいって差分を取り込む。といった感じでしょうか。

その後、フィールドの重複調査をし、その扱いをどうするか考える。

... この辺り、ボリュームも膨らんできそうなのと、zen 側の仕様の安定度合いも不明なので、これぐらいで本 issue をクローズしたいと思います

@naopontan naopontan closed this May 24, 2018

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 24, 2018

アプローチとしては「zen にしか無い情報は zen 上で修正させる」がいいと思います

こちら、アプローチとしては「zen にしか無い情報は zen 上で修正させる」以外の方法はない、という認識で大丈夫ですか? 🤔💭

タスクとして書き出していた、

coderdojo.jp のDBに Zen の情報を取り込む時、どんなアプローチがあるか? をいくつかまとめる

に対して、この Issue が Close された時点までに出てきたアプローチが1つしかなかったので 😅

@yasulab yasulab reopened this May 24, 2018

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 24, 2018

jp 側で全て済ませる → zen 側の情報をAPI経由で更新する → APIを駆使&機能あるか?の要調査

あ、こちらも別案として1つありましたね。これを足して2つのアプローチがある、ということですかね🤔

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 24, 2018

もうちょっと具体的な参考情報を出すと、API 連携の調査結果が他に人から見ても役に立つように、例えば次のような形で情報をまとめてもらえると嬉しいです 🙏 こちらもご参考にしていただければ! 😸

⚠️ タイトルに社内の秘密情報が含まれているため一部タイトルを変えています

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 24, 2018

アプローチとしては「zen にしか無い情報は zen 上で修正させる」がいいと思います

こちら、アプローチとしては「zen にしか無い情報は zen 上で修正させる」以外の方法はない、という認識で大丈夫ですか? 🤔💭

jp 側で全て済ませる → zen 側の情報をAPI経由で更新する → APIを駆使&機能あるか?の要調査

あ、こちらも別案として1つありましたね。これを足して2つのアプローチがある、ということですかね🤔

はそういう意味では1つですね 😅
そっか、他のアプローチは...うーん、すみません思いつかない.. 😿


もうちょっと具体的な参考情報を出すと、API 連携の調査結果が他に人から見ても役に立つように、例えば次のような形で情報をまとめてもらえると嬉しいです

@yasulab
こちらは Qiita:Team の方でまとめた方がいいですか?それとも、この issue 上のコメントとしてまとめる。って事でしょうか?

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 24, 2018

はい! 😄 恐らく記事内容を何度か修正・変更することになりそうなので、まずは Qiita:Team で書いてもらって、内容が固まってきたら本 Issue の Description に転記するカタチで行きましょう! 👍 (なので基本的には一般公開する前提で書いていただければ! 📝💨)

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 25, 2018

本 Issue の Description に転記する

@naopontan こちら、そういえば /docs ディレクトリがあったことを失念していました >< 💦

Issue の Description より docs ディレクトリの方が読まれやすいので、調査結果をまとめたレポートを docs ディレクトリに置いたら本 Issue を完了としましょう 📑📝

cf. ドキュメント例: 新規Dojoの追加方法

@naopontan

This comment has been minimized.

Copy link
Contributor Author

naopontan commented May 25, 2018

@yasulab
確認ですが、 Qiita:Team に先程POSTした情報を Markdown 形式で /docs 配下に新規で作れば良いですか?

@yasulab

This comment has been minimized.

Copy link
Member

yasulab commented May 25, 2018

はい! そちらでよろしくお願いします ;) いくつかフィードバックしたい部分もあるので、PRで出していただけると助かります 📑👀

naopontan added a commit that referenced this issue May 25, 2018

@naopontan naopontan referenced this issue Jun 1, 2018

Merged

道場を非表示にする仕組みの追加 #340

5 of 5 tasks complete
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment