Time is Moneyとは言うけれど…

大学院のBusiness Project(卒論とか修論とかソレ系のヤツ)で、久しぶりにコードを書いてて、しょうもないことに2時間くらい使ってしまった。
Screen Shot 2018-05-06 at 22.13.43

↓こんな感じで、片っ端からUnicornなStartupのGitHubのレポジトリを集めてきてTF-IDFとかしてホゲホゲしようと思って、

curl -i -u shinodogg:トークン "https://api.github.com/orgs/uber/repos?per_page=100" > uber.txt
curl -i -u shinodogg:トークン "https://api.github.com/orgs/uber/repos?per_page=100&page=2" > uber2.txt
curl -i -u shinodogg:トークン "https://api.github.com/orgs/didichuxing/repos?per_page=100" > didichuxing.txt
curl -i -u shinodogg:トークン "https://api.github.com/orgs/xiaomi/repos?per_page=100" > xiaomi.txt
curl -i -u shinodogg:トークン "https://api.github.com/orgs/Meituan-Dianping/repos?per_page=100" > Meituan-Dianping.txt
curl -i -u shinodogg:トークン "https://api.github.com/orgs/airbnb/repos?per_page=100" > airbnb.txt
curl -i -u shinodogg:トークン "https://api.github.com/orgs/airbnb/repos?per_page=100&page=2" > airbnb2.txt

↓落ちてきたJSONのリスト(にレスポンスヘッダがついてる)をAmazon Elasticsearch Serviceに食わせるのに(しかし、このAmazonESのKibanaのCognito連携はとてもイイわぁ〜)、

    1 HTTP/1.1 200 OK^M
    2 Date: Sat, 05 May 2018 13:02:32 GMT^M
    3 Content-Type: application/json; charset=utf-8^M
    4 Content-Length: 540962^M
    5 Server: GitHub.com^M
    6 Status: 200 OK^M
    7 X-RateLimit-Limit: 5000^M
    8 X-RateLimit-Remaining: 4999^M
    9 X-RateLimit-Reset: 1525528952^M
   10 Cache-Control: private, max-age=60, s-maxage=60^M
   11 Vary: Accept, Authorization, Cookie, X-GitHub-OTP^M
   12 ETag: "f880e829ef509e6843f7e96f0d47ed40"^M
   13 X-OAuth-Scopes: repo^M
   14 X-Accepted-OAuth-Scopes: ^M
   15 X-GitHub-Media-Type: github.v3; format=json^M
   16 Link: ; rel="next", ; rel="last"^M
   17 Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval^M
   18 Access-Control-Allow-Origin: *^M
   19 Strict-Transport-Security: max-age=31536000; includeSubdomains; preload^M
   20 X-Frame-Options: deny^M
   21 X-Content-Type-Options: nosniff^M
   22 X-XSS-Protection: 1; mode=block^M
   23 Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin^M
   24 Content-Security-Policy: default-src 'none'^M
   25 X-Runtime-rack: 0.611038^M
   26 Vary: Accept-Encoding^M
   27 X-GitHub-Request-Id: 9742:84EF:AB1F09:D922EC:5AEDAB67^M
   28 ^M
   29 [
   30   {
   31     "id": 1662444,
   32     "name": "uber-node-spruce",
   33     "full_name": "uber/uber-node-spruce",
   34     "owner": {
   35       "login": "uber",
   36       "id": 538264,
   37       "avatar_url": "https://avatars3.githubusercontent.com/u/538264?v=4",

↓こんな感じで28行目まですっ飛ばして(こういう汚いコード辞めたいですが、仕事じゃねーんだから‥的な?^^;)、JSONにパースしてからそれをぶん回してなんていうコードを、AWS Cloud9上のPythonでろくなテストもしないで書いてたのですが、、、

files = glob.glob("./*.txt")
for file in files:
    f = open(file)
    data = f.read()
    lines = data.split('\n')
    line_num = 0
    json_str = ""
    for line in lines:
        line_num = line_num + 1
        if line_num > 27:
            json_str = json_str + line    
    json_list = json.loads(json_str)
    for j in json_list:
        〜略〜

中には↓こういう見つからないヤツがいたりなんかして…。

  1 HTTP/1.1 404 Not Found^M
  2 Date: Sat, 05 May 2018 13:07:00 GMT^M
  3 Content-Type: application/json; charset=utf-8^M
  4 Content-Length: 125^M
  5 Server: GitHub.com^M
  6 Status: 404 Not Found^M
  7 X-RateLimit-Limit: 5000^M
  8 X-RateLimit-Remaining: 4861^M
  9 X-RateLimit-Reset: 1525528952^M
 10 X-OAuth-Scopes: repo^M
 11 X-Accepted-OAuth-Scopes: repo^M
 12 X-GitHub-Media-Type: github.v3; format=json^M
 13 Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval^M
 14 Access-Control-Allow-Origin: *^M
 15 Strict-Transport-Security: max-age=31536000; includeSubdomains; preload^M
 16 X-Frame-Options: deny^M
 17 X-Content-Type-Options: nosniff^M
 18 X-XSS-Protection: 1; mode=block^M
 19 Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin^M
 20 Content-Security-Policy: default-src 'none'^M
 21 X-Runtime-rack: 0.033181^M
 22 X-GitHub-Request-Id: 8F17:84F1:179CB3D:1DEE220:5AEDAC74^M
 23 ^M
 24 {
 25   "message": "Not Found",
 26   "documentation_url": "https://developer.github.com/v3/repos/#list-organization-repositories"
 27 }

こいつがJSONのパースのところで『JSON parse json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)』とかいうエラー吐くんだけど、ちゃんとデータみないでファイルから読み込む時のエンコードか?とか、無駄になんか色々詮索してしまって1時間以上使ってしまいましたよ、と。。。

はっきり言ってコレ、人生において無駄な時間に他ならない(っていうか、他にやんなきゃいけないこと沢山あるんすよね。。)ような気もするのですが、あの宮川さん(って、実際にお会いしたこととかありませんが、いっつもrebuild.fm)聴いてるので、勝手に親近感…w)でさえ↓こんなことがあったりするわけです。

毎日こういうことを積み重ねていくと、ドンドン熟練感が出てきて、どこの現場いっても通用するようなエンジニアになれるような、いや、そうじゃなくて、ちゃんとテスト書いたり、ちょこちょこデータみたりしながらデバッグしようぜって話なんだけど、まぁなんというか、ゴールデンウィークの最終日に慌ててアレコレするのではなくて、計画的にプロジェクトを進めましょうねっていう話か…

とりあえず版のプロトタイプみたいのが出来たら、継続的にGitHubのAPI叩いて集めてきたデータを機械学習とかして今風みたいなヤツもやってみたりしたいのぅ。

シェアする

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

フォローする