Wikidot APIの使い方

wikidot-api.png

APIはPro Accountを買わないと使うことができない。
毎年9月ぐらいに40%セールをしているみたい。

Pythonコンソールを開く

from xmlrpc.client import ServerProxy

s = ServerProxy('https://your-app:your-key@www.wikidot.com/xml-rpc-api.php')
s.system.listMethods()

私の場合はこう返ってきた
['system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall', 'categories.select', 'tags.select', 'pages.select', 'pages.get_meta', 'pages.get_one', 'pages.save_one', 'files.select', 'files.get_meta', 'files.get_one', 'files.save_one', 'users.get_me', 'posts.select', 'posts.get']

自分のサイトに存在しているカテゴリーをリストアップ

s.categories.select({"site":"miffysora"})

私のサイトの名前はmiffysoraなので、第2引数にmiffysoraと記入する。するとこう返ってきた。
引数はdictになっている。
['markdownsample', 'markdown', 'doxygen', 'wikidot', 'webgl', 'template', 'system', 'search', 'quaternion', 'nav', 'material', 'main', 'legal', 'ja', 'include', 'gamepad', 'forum', 'en', 'cubemap', 'color-scheme', 'color', 'blog', '_default', 'map', 'glsl', 'gimp', 'css', 'inc', 'framebuffer', 'anttweakbar', 'glfw', 'admin']

ある特定のページに有るファイルのリストを取得する

2つ以上引数があるときはこうすればいいんだっていういい例ですね

s.files.select({"site":"miffysora","page":"raycasting"})

こうかえってきた
['top.jpg', 'raycasting.png', '20plate-raycasting.png', 'plate10-raycasting.png', 'wall.jpg', 'stamp.jpg', 'glass.jpg', 'bonsai.jpg']

ファイルのメタ情報をゲット

from xmlrpc.client import ServerProxy
s=ServerProxy("https://miffysora:APIパスワード@www.wikidot.com/xml-rpc-api.php")
array=['top.jpg', 'raycasting.png']
ret=s.files.get_meta({"site":"miffysora","page":"raycasting","files":array})
print(ret)

こんなのが返ってきます
['system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall', 'categories.select', 'tags.select', 'pages.select', 'pages.get_meta', 'pages.get_one', 'pages.save_one', 'files.select', 'files.get_meta', 'files.get_one', 'files.save_one', 'users.get_me', 'posts.select', 'posts.get']
{'selection': {
    'title': '選択肢の英単語', 
    'created_at': '2013-01-28T13:57:01+00:00', 
    'title_shown': '選択肢の英単語', 
    'fullname': 'selection', 
    'tags': [], 
    'rating': 0,
     'updated_by': 'miffysora',
     'created_by': 'miffysora', 
    'revisions': 1, 
    'parent_fullname': 'toeic', 
    'updated_at': '2013-01-28T13:57:14+00:00'}, 
'news': {
    'title': 'ニュース関係の英語', 
    'created_at': '2013-02-05T12:41:15+00:00', 
    'title_shown': 'ニュース関係の英語', 
    'fullname': 'news', 
    'tags': [], 'rating': 0, 'updated_by': 'miffysora', 'created_by': 'miffysora', 'revisions': 1, 'parent_fullname': 'toeic', 'updated_at': '2013-02-05T12:41:25+00:00'},
 'money': {'title': 'お金関係の英語', 'created_at': '2012-08-21T23:52:07+00:00', 'title_shown': 'お金関係の英語', 'fullname': 'money', 'tags': [], 'rating': 0, 'updated_by': 'miffysora', 'created_by': 'miffysora', 'revisions': 30, 'parent_fullname': 'toeic', 'updated_at': '2013-09-05T03:50:15+00:00'},
 'company': {'title': '会社・求人関連の英語', 'created_at': '2013-01-24T13:04:09+00:00', 'title_shown': '会社・求人関連の英語', 'fullname': 'company', 'tags': ['job'], 'rating': 0, 'updated_by': 'miffysora', 'created_by': 'miffysora', 'revisions': 17, 'parent_fullname': 'toeic', 'updated_at': '2013-08-31T14:29:17+00:00'}, 
'party': {'title': '飲み会関係の英語', 'created_at': '2013-01-24T13:23:38+00:00', 'title_shown': '飲み会関係の英語', 'fullname': 'party', 'tags': [], 'rating': 0, 'updated_by': 'miffysora', 'created_by': 'miffysora', 'revisions': 1, 'parent_fullname': 'toeic', 'updated_at': '2013-01-24T13:27:59+00:00'}
}

wikidotページを作る

これが醍醐味ってやつよね?

from xmlrpc.client import ServerProxy
s=ServerProxy("https://miffysora:APIのパスワード@www.wikidot.com/xml-rpc-api.php")
ret=s.pages.save_one({"site":"miffysora",
                  "page":"sample",
                  "title":"I just try My API",
                  "save_mode":"create"})
print(ret)

戻り値にはページ本体が返ってくるってかいてあったけど、printしてみたらこうなった。
{'parent_fullname': None, 'commented_at': None, 'html': '\n\n\n<div style="clear:left"></div>\n\n<div style="clear:left"></div>\n\n<p><iframe class="html-block-iframe" src="/sample/html/bd3b500e83284ac7df74ec5eee91a98ec5607a39-11777812212084826648" allowtransparency="true" frameborder="0"></iframe></p>\n', 'comments': 0, 'title_shown': 'I just try My API', 'commented_by': None, 'created_by': 'miffysora', 'tags': [], 'children': 0, 'fullname': 'sample', 'revisions': 0, 'created_at': '2013-09-14T06:29:50+00:00', 'parent_title': None, 'rating': 0, 'content': '', 'title': 'I just try My API', 'updated_by': 'miffysora', 'updated_at': '2013-09-14T06:29:50+00:00'}

pythonから作ったページはこちらsample

Wikidot-APIで使える機能一覧

categories.select
files.select あるページのファイルをリストアップ
files.get_meta ファイルのメタ情報(誰がアップロードした、保管場所はどこか等)をリストアップ
files.get_one
files.save_one
tags.select
pages.select
pages.get_meta
pages.get_one
pages.save_one
posts.select
posts.get
users.get_me

遭遇したエラー

from xmlrpclib import ServerProxy

と打ってこう返ってきた

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    from xmlrpclib import ServerProxy
ImportError: No module named 'xmlrpclib'

ていうか、Python3では名前変更になったらしい

xmlrpclib モジュールは、Python 3では xmlrpc.client にリネームされました

Python以外の言語でやりたい

XML-RPC ライブラリを持っている言語ならなんでもok
Rubyのwikidot-APIライブラリなら存在する[2]
Android-XmlRpcというのもあるらしい。

Bibliography
4. wikidot-page-copy.py…wikidotのサイトからサイトへまるごとコピーするためのスクリプト(git)

サポートサイト Wikidot.com