11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

APIでできること vol.1

Last updated at Posted at 2014-01-13

はじめに

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

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

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

ニコニコ

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

こちらのページを参考に、ニコニコ動画でマイリスト作成とマイリスト登録するものを書いてみました。

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を渡した上で実行します。

$ chmod +x nico_mylist_add.py

$ ./nico_mylist_add.py mylistname sm9 sm1097445 sm1715919

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

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

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

$ cat ~/.netrc

#############################
machine   nicovideo
login     sample@gmail.com
password  pass123
#############################

処理としては、以下の通りです。

#!/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は引数から取得する

#!/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/

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にて、プロジェクトを作成し、使用するAPIを有効にしていきます。

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

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=以下の部分です。

$ 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などが発行されるので、その値を使って、ユーザ情報を取得できます。こちらのページがとても参考になります。

$ 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

参考

https://github.com/sorah/niconico

https://github.com/google/google-api-ruby-client

https://developers.google.com/+/api/latest/?hl=ja

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?