APIでできること vol.1


##はじめに

今回は､APIでできることを紹介していこうと思います｡

ここでいうAPIとは、インターネットに繋がっていればいつでも呼び出せる機能のようなもののことを言います｡

企業や個人が公開してるものを紹介していく予定です｡

##ニコニコ

###ニコニコ動画でマイリスト作成とマイリスト登録する方法

[こちら](http://d.hatena.ne.jp/lolloo-htn/20110115/1295105845)のページを参考に､ニコニコ動画でマイリスト作成とマイリスト登録するものを書いてみました。


```python:nico_mylist_add.py
#!/usr/bin/env python
#coding: utf8
import sys, re, cgi, urllib, urllib2, cookielib, xml.dom.minidom, time, netrc
import json
 
#netrc
netrc = netrc.netrc()
userid,a,passwd = netrc.authenticators("nicovideo")
 
def getToken():
    html = urllib2.urlopen("http://www.nicovideo.jp/my/mylist").read()
    for line in html.splitlines():
        mo = re.match(r'^\s*NicoAPI\.token = "(?P<token>[\d\w-]+)";\s*',line)
        if mo:
            token = mo.group('token')
            break
    assert token
    return token
 
def mylist_create(name):
    cmdurl = "http://www.nicovideo.jp/api/mylistgroup/add"
    q = {}
    q['name'] = name.encode("utf8")
    q['description'] = ""
    q['public'] = 0
    q['default_sort'] = 0
    q['icon_id'] = 0
    q['token'] = token
    cmdurl += "?" + urllib.urlencode(q)
    j = json.load( urllib2.urlopen(cmdurl), encoding='utf8')
    return j['id']
 
def addvideo_tomylist(mid,smids):
    for smid in smids:
        cmdurl = "http://www.nicovideo.jp/api/mylist/add"
        q = {}
        q['group_id'] = mid
        q['item_type'] = 0
        q['item_id'] = smid
        q['description'] = u""
        q['token'] = token
        cmdurl += "?" + urllib.urlencode(q)
        j = json.load( urllib2.urlopen(cmdurl), encoding='utf8')
        time.sleep(0.5)
 
#ログイン
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
urllib2.urlopen("https://secure.nicovideo.jp/secure/login",
                urllib.urlencode( {"mail":userid, "password":passwd}) )
#トークン取得
token = getToken()
 
#argv
myn = sys.argv[1]
argvs = sys.argv[2:]
 
#マイリストの作成と動画の登録
mid = mylist_create(myn)
addvideo_tomylist(mid, argvs )
```

使い方は､簡単で､ファイルに実行権限を与えます。そして、URLを渡した上で実行します｡

```bash:
$ chmod +x nico_mylist_add.py

$ ./nico_mylist_add.py mylistname sm9 sm1097445 sm1715919
```


変更点は、①ログイン情報は`netrc`から取得するのと、②マイリストの名前及び、URLは引数から取得するのです。

####ログイン情報は`netrc`から取得する

`netrc`は以下のようになっています。

```bash:
$ cat ~/.netrc
 
#############################
machine   nicovideo
login     sample@gmail.com
password  pass123
#############################
```

処理としては､以下の通りです｡

```python:
#!/usr/bin/env python
import netrc
netrc = netrc.netrc()
l, a, p = netrccfg.authenticators("nicovideo")
print "My Login = %s" % (l)
print "My Password = %s" % (p)
print "My Account= %s" % (a)
```

####マイリストの名前及び、URLは引数から取得する

```python:
#!/usr/bin/env python
import sys
mylistname = sys.argv[1]
argvs = sys.argv[2:]
print mylistname
print argvs
```

###ニコニコ動画で既存マイリストにマイリスト登録する方法

例えば､既存のマイリストにURLを登録するには､以下の様な変更を加えます｡

まずは、`addvideo_tomylist`を変更します。`xxxx`の部分には`group_id`を入れます｡

ここで、`group_id`を取得するには､`http://www.nicovideo.jp/api/mylistgroup/list`を使います｡たぶん…。

参考:
[http://efcl.info/wiki/niconicoapi/](http://efcl.info/wiki/niconicoapi/)


```
def addvideo_tomylist(smids):
    for smid in smids:
        cmdurl = "http://www.nicovideo.jp/api/mylist/add"
        q = {}
        q['group_id'] = xxxxxxxx
        q['item_type'] = 0
        q['item_id'] = smid
        q['description'] = u""
        q['token'] = token
        cmdurl += "?" + urllib.urlencode(q)
        j = json.load( urllib2.urlopen(cmdurl), encoding='utf8')
        time.sleep(0.5)
```

あと、引数には、マイリストの名前を渡す必要がなくなりましたので､その部分を変更します｡

```
#argv
#myn = sys.argv[1]
argvs = sys.argv[1:]
```

##Google+

Google+のAPIを使って､ユーザー情報を取得してみます｡

[Google Cloud Console](https://code.google.com/apis/console/)にて、プロジェクトを作成し､使用するAPIを有効にしていきます。




まず、ブラウザで以下のURLにアクセスし､` Authorization code`を取得します｡

```bash:
https://accounts.google.com/o/oauth2/auth?client_id=[クライアント ID]&redirect_uri=[リダイレクト URI]&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.me&response_type=code
```

なお、`[]`は含みません｡注意してください｡

` Authorization code`は、ページURLの `code=`以下の部分です｡

```bash:
$ curl -d client_id=[YOUR Client Id] -d client_secret=[YOUR Client Secret] -d redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback -d grant_type=authorization_code -d code=[YOUR Authorization code] https://accounts.google.com/o/oauth2/token
```

`access_token`などが発行されるので、その値を使って､ユーザ情報を取得できます｡[こちら](http://d.hatena.ne.jp/iad_otomamay/20130213/1360753743)のページがとても参考になります｡

```bash:
$ curl -H "Authorization: OAuth [YOUR Access_token]" https://www.googleapis.com/plus/v1/people/me
```

なお、`access_token`は、一定期間で失効しますので、Google APIを使ったアプリを作る場合は､`refresh_token`を使うとよいでしょう｡


参考:
[http://mba-hack.blogspot.jp/2013/12/google-api.html](http://mba-hack.blogspot.jp/2013/12/google-api.html)


##参考

[https://github.com/sorah/niconico](https://github.com/sorah/niconico)

[https://github.com/google/google-api-ruby-client](https://github.com/google/google-api-ruby-client)

[https://developers.google.com/+/api/latest/?hl=ja](https://developers.google.com/+/api/latest/?hl=ja)