Jupyter Notebook (IPython Notebook)でGITHUB APIを呼んでみる。

前回の続きでデータ(株価とか)を解析しなくてはならなくなったので、Jupyter NotebookをWindows 10にインストールして以前に作ったPythonコードで試運転してみた。

Anacondaをダウンロード

www.continuum.io/downloads から好きなのをダウンロードしてインストールしてください。

Anacondaをインストール

ホストOSの関係で”Python 3.6 version, 64-BIT INSTALLER”をダウンロードしてインストールしていきます。

host OS
ホストOSは64bit Windows 10

ダウンロードページに方法が書いてあるので、細かい手続きは省略します。

起動

スタートメニューから”Jupyter Notebook”をクリックすると、ブラウザが立ち上がってくる。

こんなエラーで起動に失敗したときは、環境変数PYTHONHOMEが原因なので

Fatal Python error: Py_initialize: unable to load the file system codec
  File "C:\Python27\lib\encodings\__init__.py", line 123
    raise CodecRegistryError,\

SyntaxError: invalid syntax

Current thread 0x00000dc4 (most recent call first):

こうする

Uninstall Python2.7
古いPython(Python2.7)をアンインストールして
remove PYTHONHOME
環境変数PYTHONHOMEを削除する。

そのあと環境変数HOMEに自分のドキュメントフォルダを設定する。

新規作成

HOME
環境変数HOMEに設定したフォルダが見えている

右の方にあるNewからPython3を選択する。

試運転

以前に作ったPythonコードをコピーして”In [ ]”の箱にペーストしてからCellメニュー内のRun Cellsをクリックするか”run cell”アイコンをクリックする

Python2.7のコードをPython3で実行すると、当然エラーがでる。

Python3で実行できるように少々変更して

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, json, functools
from urllib.request import urlopen, Request

# GitHub Traffic API
# https://developer.github.com/v3/repos/traffic/
def openTrafficAPI (owner, repo, token, path):
    url = "https://api.github.com/repos/%s/%s/traffic/%s" % (owner, repo, path)
    headers = {
        'Authorization': 'token %s' % token,
        'Accept': 'application/vnd.github.spiderman-preview'
    }
    return urlopen (Request (url, headers=headers))

# 取ってくるデーター
paths = [
    'popular/referrers',
    'popular/paths',
    'views',
    'clones',
]

connections = []
try:
    # openTrafficAPI関数の部分適用 (認証情報を環境変数から得て)
    fAPI = functools.partial (openTrafficAPI,
                                os.environ['GITHUB_OWNER'],
                                os.environ['GITHUB_REPO'],
                                os.environ['GITHUB_TOKEN'])
    # open connections
    connections = [fAPI (p) for p in paths]
    # JSONパース
    datadicts = [json.loads (c.read ()) for c in connections]
finally:
    [c.close () for c in connections if c is not None]          # 後始末

del connections

# 辞書型のデーターをダンプ
dumps = [json.dumps (d, indent=2) for d in datadicts]
# 結合
print ("\n".join (dumps))

printに()が必要になったとか、urllibの名前が変更になったくらいでほぼ同じでOK

結果

きちんととれました。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください