コンテンツにスキップ

「AurJson」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
編集の要約なし
同期
4行目: 4行目:
{{Related|公式リポジトリウェブインターフェイス}}
{{Related|公式リポジトリウェブインターフェイス}}
{{Related articles end}}
{{Related articles end}}
'''AurJson''' インターフェイスは [[AUR]] の軽量リモートインターフェイスです。http の GET クエリでリクエストすることで、[http://www.json.org/ json] データとしてレスポンスを得ることができます。
[https://aur.archlinux.org/rpc.php AurJson] インターフェイスは [[AUR]] の軽量リモートインターフェイスです。http の GET クエリでリクエストすることで、[http://www.json.org/ json] データとしてレスポンスを得ることができます。

{{Note|この記事では2016年2月15日にリリースされた AUR v4.2.0 の RPC インターフェイス API バージョン5について説明しています。}}


== API の使用方法 ==
== API の使用方法 ==


=== クエリタイプ ===
[https://aur.archlinux.org/rpc.php RPC インターフェイス] には4つのクエリタイプがあります:

以下の2つのクエリタイプが存在します:


* search
* search
* msearch
* info
* info
* multiinfo


==== search ====
各メソッドには以下の HTTP GET 構文でアクセスする必要があります:


以下の形式のリクエストを実行することでパッケージを検索できます:
type=methodname&arg=data


/rpc/?v=5&type=search&by=''field''&arg=''keywords''
'''''methodname''''' は使用するメソッドの名前に、'''''data''''' はコールの引数に置き換えて下さい。


{{ic|''keywords''}} は検索単語に {{ic|''field''}} は以下の値のどれかに置き換えてください:
データは json 形式で返ってきます。


* {{ic|name}} (パッケージ名だけで検索)
=== クエリタイプ ===
* {{ic|name-desc}} (パッケージ名と説明の両方で検索)
* {{ic|maintainer}} (パッケージメンテナで検索)


{{ic|by}} パラメータは省略することができ、その場合は {{ic|name-desc}} がデフォルトです。
上述したように、4つのクエリタイプが存在します:
* search
* msearch
* info
* multiinfo


返り値タイプは {{ic|search}} または {{ic|error}} になります。
==== search ====


検索単語を空にしてメンテナ検索した場合、メンテナが存在しないパッケージのリストが返ってきます。
'''''search''''' タイプのクエリにはパッケージ検索を行う文字列を指定します。返ってくるタイプは '''''error''''' と '''''search''''' です。


例:
例:
<nowiki>https://aur.archlinux.org/rpc.php?type=search&arg=foobar</nowiki>


{{ic|foobar}} で検索:
上記のクエリのタイプは '''''search''''' で検索引数は "foobar" です。
<nowiki>https://aur.archlinux.org/rpc/?v=5&type=search&arg=foobar</nowiki>


{{ic|john}} によってメンテナンスされているパッケージを検索:
==== msearch ====
<nowiki>https://aur.archlinux.org/rpc/?v=5&type=search&by=maintainer&arg=john</nowiki>


コールバックを指定して検索:
'''''msearch''''' タイプのクエリにはメンテナの名前で検索する文字列を指定します。返答タイプは '''''error''''' と '''''msearch''''' です。
<nowiki>https://aur.archlinux.org/rpc/?v=5&type=search&arg=foobar&callback=jsonp1192244621103</nowiki>


==== info ====
例:
<nowiki>https://aur.archlinux.org/rpc.php?type=msearch&arg=cactus</nowiki>


以下の形式のリクエストを実行することでパッケージの情報を取得できます:
上記のクエリのタイプは '''''msearch''''' で検索引数は "cactus" です。


/rpc/?v=5&type=info&arg[]=''pkg1''&arg[]=''pkg2''&…
==== info ====

{{ic|''pkg1''}} や {{ic|''pkg2''}} は情報を取得したいパッケージの名前に置き換えてください (完全一致です)。


返り値タイプは {{ic|multiinfo}} または {{ic|error}} になります。
'''''info''''' タイプのクエリには文字列あるいは数値を指定します。数値の場合、既存の packageID と完全一致する必要があり、一致しなければ '''''error''''' タイプが返ってきます。文字列の場合、既存の packageName と完全一致する必要があり、一致しない場合 '''''error''''' タイプが返ってきます。


例:
例:
<nowiki>https://aur.archlinux.org/rpc.php?type=info&arg=1123</nowiki>
<nowiki>https://aur.archlinux.org/rpc.php?type=info&arg=foobar</nowiki>


{{ic|foobar}} パッケージの情報を取得:
上記の例はどちらも '''''info''''' タイプのクエリです。前者のクエリは数値を指定しており、後者は packageName 引数を使っています。packageID 1123 が packageName foobar に対応していた場合、上記のクエリはどちらも foobar パッケージの詳細を返します。
<nowiki>https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=foobar</nowiki>


{{ic|foobar}} と {{ic|bar}} パッケージの情報を取得:
==== multiinfo ====
<nowiki>https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=foo&arg[]=bar</nowiki>

現実的には info リクエストを大量に行う必要が出てくることもあるでしょう。AUR では一回のリクエストで複数のパッケージを処理することができます。

例:
<nowiki>https://aur.archlinux.org/rpc.php?type=multiinfo&arg[]=cups-xerox&arg[]=cups-mc2430dl&arg[]=10673</nowiki>


=== 返り値タイプ ===
=== 返り値タイプ ===


返り値は5つあるタイプのどれかになります。かならずタイプを返すので、操作の結果がエラーだったかどうか判断することができます。
返り値は3つあるタイプのどれかになります。かならずタイプを返すので、操作の結果がエラーだったかどうか判断することができます。


返り値のペイロードは以下の形式になっています:
返り値のペイロードは以下の形式になっています:
{"type":ReturnType,"results":ReturnData}
{"version":5,"type":''ReturnType'',"resultcount":0,"results":''ReturnData''}


ReturnType は文字列で、以下のうちのどれかす:
{{ic|''ReturnType''}} は文字列で、以下のうちのどれかになります:
* error
* search
* msearch
* info
* multiinfo


* {{ic|search}}
ReturnData のタイプはクエリタイプによります:
* {{ic|multiinfo}}
* ReturnType が '''''error''''' なら ReturnData は文字列です。
* {{ic|error}}
* ReturnType が '''''search''''' なら ReturnData は辞書オブジェクトの配列です。

* ReturnType が '''''msearch''''' なら ReturnData は辞書オブジェクトの配列です。
{{ic|''ReturnType''}} が {{ic|search}} と {{ic|multiinfo}} の場合は {{ic|''ReturnData''}} はオブジェクト配列となり、{{ic|''ReturnType''}} が {{ic|error}} の場合は空の配列になります。
* ReturnType が '''''info''''' なら ReturnData は辞書オブジェクトです。
* ReturnType が '''''multiinfo''''' なら ReturnData は辞書オブジェクトの配列です。


==== error ====
==== error ====
error タイプはエラーのレスポンス文字列を返り値に含みます。エラーレスポンスは '''''search''''''''''info''''' クエリタイプのどちらかで返ってます。
error タイプはエラーのレスポンス文字列を返り値に含みます。エラーレスポンスは {{ic|search}}{{ic|info}} クエリタイプで返ってくることがあります。


ReturnType '''''error''''' の例:
{{ic|''ReturnType''}} {{ic|error}} の例:
{"type":"error","results":"No results found"}
{"version":5,"type":"error","resultcount":0,"results":[],"error":"Incorrect by field specified."}


==== search ====
==== search ====
search タイプは search リクエストから返される結果です。検索の結果は、info リクエストと同じです。info セクションを見てください。
search タイプは search リクエストから返される結果です。検索の結果は、info リクエストと同じです。info セクションを見てください。


ReturnType '''''search''''' の例:
{{ic|''ReturnType''}} {{ic|search}} の例:
{"type":"search","results":[{"Name":"pam_abl","ID":1995, ...}]}
{"version":5,"type":"search","resultcount":2,"results":[{"ID":206807,"Name":"cower-git", ...}]}

==== msearch ====
msearch タイプは msearch リクエストから返される結果です。検索の結果は、info リクエストと同じです。info セクションを見てください。

ReturnType '''''msearch''''' の例:
{"type":"msearch","results":[{"Name":"pam_abl","ID":1995, ...}]}


==== info ====
==== info ====
info タイプは info リクエストから返される結果です。検索でこのタイプが返ってきたら検索のレスポンスが検索データかエラーかを判断できます。
info タイプは info リクエストから返される結果です。


{{ic|''ReturnType''}} {{ic|multiinfo}} の例:
ReturnType '''''info''''' の例:
<nowiki>
<nowiki>
{
{
"type": "info",
"version":5,
"results": {
"type":"multiinfo",
"resultcount":1,
"URL": "http://pam-abl.deksai.com/"
"results":[{
"Description": "Automated blacklisting on repeated failed authentication attempts"
"Version": "0.4.3-1"
"ID":229417,
"Name": "pam_abl"
"Name":"cower",
"FirstSubmitted": 1125707839
"PackageBaseID":44921,
"License": "BSD GPL"
"PackageBase":"cower",
"ID": 1995
"Version":"14-2",
"Description":"A simple AUR agent with a pretentious name",
"OutOfDate": 0
"URL":"http:\/\/github.com\/falconindy\/cower",
"LastModified": 1336659370
"Maintainer": "redden0t8"
"NumVotes":590,
"CategoryID": 16
"Popularity":24.595536,
"OutOfDate":null,
"URLPath": "/packages/pa/pam_abl/pam_abl.tar.gz"
"NumVotes": 10
"Maintainer":"falconindy",
"FirstSubmitted":1293676237,
}
"LastModified":1441804093,

"URLPath":"\/cgit\/aur.git\/snapshot\/cower.tar.gz",
"Depends":[
"curl",
"openssl",
"pacman",
"yajl"
],
"MakeDepends":[
"perl"
],
"License":[
"MIT"
],
"Keywords":[]
}]
}
}
</nowiki>
</nowiki>

==== multiinfo ====
multiinfo タイプは multiinfo リクエストから返される結果です。リクエストの結果は、info リクエストと同じです。info セクションを見てください。

ReturnType '''''multiinfo''''' の例:
{"type":"multiinfo","results":[{"Name":"pam_abl","ID":1995, ...}]}


=== jsonp ===
=== jsonp ===


JavaScript ページを作っていて、JSON のコールバックメカニズムが必要な場合、可能です。callback 変数を追加で指定してください。コールバックは基本的に JavaScript のライブラリで処理しますが、以下が例です。
JavaScript ページを作っていて、JSON のコールバックメカニズムが必要な場合、callback 変数を追加で指定することで可能です。コールバックは基本的に JavaScript のライブラリで処理しますが、以下が例です。


クエリの例:
クエリの例:
<nowiki>https://aur.archlinux.org/rpc.php?type=search&arg=foobar&callback=jsonp1192244621103</nowiki>
<nowiki>https://aur.archlinux.org/rpc/?v=5&type=search&arg=foobar&callback=jsonp1192244621103</nowiki>


結果:
結果の例:
/**/jsonp1192244621103({"version":5,"type":"search","resultcount":1,"results":[{"ID":250608,"Name":"foobar2000","PackageBaseID":37068,"PackageBase":"foobar2000","Version":"1.3.9-1","Description":"An advanced freeware audio player (uses Wine).","URL":"http:\/\/www.foobar2000.org\/","NumVotes":39,"Popularity":0.425966,"OutOfDate":null,"Maintainer":"supermario","FirstSubmitted":1273255356,"LastModified":1448326415,"URLPath":"\/cgit\/aur.git\/snapshot\/foobar2000.tar.gz"}]})
jsonp1192244621103({"type":"error","results":"No results found"})


RPC コールの結果が設定されたパラメータ (上記の場合なら {{Ic|<nowiki>{"type":"error","results":"No results found"}</nowiki>}}) で JavaScript 関数 {{Ic|jsonp1192244621103}} が自動的に呼びされます。
引数に RPC コールの結果が設定され JavaScript 関数 {{Ic|jsonp1192244621103}} が自動的に呼びされます。

== サンプル ==

クエリの例と結果:

<nowiki>https://aur-url/rpc.php?type=search&arg=foobar</nowiki>
{"type":"error","results":"No results found"}

クエリの例と結果:

<nowiki>https://aur-url/rpc.php?type=search&arg=pam_abl</nowiki>
{"type":"search","results":[{"Name":"pam_abl","ID":1995}]}

クエリの例と結果:

<nowiki>https://aur-url/rpc.php?type=info&arg=pam_abl</nowiki>
{
"type": "info",
"results": {
"Description": "Provides auto blacklisting of hosts and users responsible for repeated failed authentication attempts",
"ID": 1995,
"License": "",
"Name": "pam_abl",
"NumVotes": 4,
"OutOfDate": 0,
"URL": "<nowiki>http://www.hexten.net/pam_abl</nowiki>",
"URLPath": "/packages/pam_abl/pam_abl.tar.gz",
"Version": "0.2.3-1"
}
}


== リファレンスクライアント ==
== リファレンスクライアント ==


時と場合によっては例があったほうが物事を理解しやすいものです。リファレンス実装 (jQuery, python, ruby) が次の url にあります: https://github.com/cactus/random/tree/master/aurjson_examples
時と場合によっては例があったほうが物事を理解しやすいものです。リファレンス実装 (jQuery, python, ruby) が次の url にあります: https://github.com/cactus/random/tree/2b72a1723bfc8ae64eed6a3c40cb154accae3974/aurjson_examples


== 関連するコード ==
== 関連するコード ==


非公式の [http://xyne.archlinux.ca/projects/python3-aur/ python3-aur] には AUR のリモート JSON インターフェイスなど AUR のサービスを使用するための Python 3 モジュールが入っています。パッケージは [http://xyne.archlinux.ca/repos/ Xyne のリポジトリ] や AUR の {{AUR|python3-aur}} パッケージでインストールできます
* {{AUR|python3-aur}} パッケージには AUR のリモート JSON インターフェイスなど AUR のサービスを使用するための Python 3 モジュールが入っています。詳しくは [http://xyne.archlinux.ca/projects/python3-aur/ python3-aur] を参照
* {{Pkg|jshon}} はコマンドラインから JSON をパース・読み込み・作成します。詳しくは [http://kmkeen.com/jshon/ jshon] を参照。

2017年6月5日 (月) 21:40時点における版

AurJson インターフェイスは AUR の軽量リモートインターフェイスです。http の GET クエリでリクエストすることで、json データとしてレスポンスを得ることができます。

ノート この記事では2016年2月15日にリリースされた AUR v4.2.0 の RPC インターフェイス API バージョン5について説明しています。

API の使用方法

クエリタイプ

以下の2つのクエリタイプが存在します:

  • search
  • info

以下の形式のリクエストを実行することでパッケージを検索できます:

/rpc/?v=5&type=search&by=field&arg=keywords

keywords は検索単語に field は以下の値のどれかに置き換えてください:

  • name (パッケージ名だけで検索)
  • name-desc (パッケージ名と説明の両方で検索)
  • maintainer (パッケージメンテナで検索)

by パラメータは省略することができ、その場合は name-desc がデフォルトです。

返り値タイプは search または error になります。

検索単語を空にしてメンテナ検索した場合、メンテナが存在しないパッケージのリストが返ってきます。

例:

foobar で検索:

https://aur.archlinux.org/rpc/?v=5&type=search&arg=foobar

john によってメンテナンスされているパッケージを検索:

https://aur.archlinux.org/rpc/?v=5&type=search&by=maintainer&arg=john

コールバックを指定して検索:

https://aur.archlinux.org/rpc/?v=5&type=search&arg=foobar&callback=jsonp1192244621103

info

以下の形式のリクエストを実行することでパッケージの情報を取得できます:

/rpc/?v=5&type=info&arg[]=pkg1&arg[]=pkg2&…

pkg1pkg2 は情報を取得したいパッケージの名前に置き換えてください (完全一致です)。

返り値タイプは multiinfo または error になります。

例:

foobar パッケージの情報を取得:

https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=foobar

foobarbar パッケージの情報を取得:

https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=foo&arg[]=bar

返り値タイプ

返り値は3つあるタイプのどれかになります。かならずタイプを返すので、操作の結果がエラーだったかどうか判断することができます。

返り値のペイロードは以下の形式になっています:

{"version":5,"type":ReturnType,"resultcount":0,"results":ReturnData}

ReturnType は文字列で、以下のうちのどれかになります:

  • search
  • multiinfo
  • error

ReturnTypesearchmultiinfo の場合は ReturnData はオブジェクト配列となり、ReturnTypeerror の場合は空の配列になります。

error

error タイプはエラーのレスポンス文字列を返り値に含みます。エラーレスポンスは searchinfo クエリタイプで返ってくることがあります。

ReturnType error の例:

{"version":5,"type":"error","resultcount":0,"results":[],"error":"Incorrect by field specified."}

search

search タイプは search リクエストから返される結果です。検索の結果は、info リクエストと同じです。info セクションを見てください。

ReturnType search の例:

{"version":5,"type":"search","resultcount":2,"results":[{"ID":206807,"Name":"cower-git", ...}]}

info

info タイプは info リクエストから返される結果です。

ReturnType multiinfo の例:

 {
    "version":5,
    "type":"multiinfo",
    "resultcount":1,
    "results":[{
        "ID":229417,
        "Name":"cower",
        "PackageBaseID":44921,
        "PackageBase":"cower",
        "Version":"14-2",
        "Description":"A simple AUR agent with a pretentious name",
        "URL":"http:\/\/github.com\/falconindy\/cower",
        "NumVotes":590,
        "Popularity":24.595536,
        "OutOfDate":null,
        "Maintainer":"falconindy",
        "FirstSubmitted":1293676237,
        "LastModified":1441804093,
        "URLPath":"\/cgit\/aur.git\/snapshot\/cower.tar.gz",
        "Depends":[
            "curl",
            "openssl",
            "pacman",
            "yajl"
        ],
        "MakeDepends":[
            "perl"
        ],
        "License":[
            "MIT"
        ],
        "Keywords":[]
    }]
 }
 

jsonp

JavaScript ページを作っていて、JSON のコールバックメカニズムが必要な場合、callback 変数を追加で指定することで可能です。コールバックは基本的に JavaScript のライブラリで処理しますが、以下が例です。

クエリの例:

https://aur.archlinux.org/rpc/?v=5&type=search&arg=foobar&callback=jsonp1192244621103

結果の例:

/**/jsonp1192244621103({"version":5,"type":"search","resultcount":1,"results":[{"ID":250608,"Name":"foobar2000","PackageBaseID":37068,"PackageBase":"foobar2000","Version":"1.3.9-1","Description":"An advanced freeware audio player (uses Wine).","URL":"http:\/\/www.foobar2000.org\/","NumVotes":39,"Popularity":0.425966,"OutOfDate":null,"Maintainer":"supermario","FirstSubmitted":1273255356,"LastModified":1448326415,"URLPath":"\/cgit\/aur.git\/snapshot\/foobar2000.tar.gz"}]})

引数に RPC コールの結果が設定されて JavaScript 関数 jsonp1192244621103 が自動的に呼び出されます。

リファレンスクライアント

時と場合によっては例があったほうが物事を理解しやすいものです。リファレンス実装 (jQuery, python, ruby) が次の url にあります: https://github.com/cactus/random/tree/2b72a1723bfc8ae64eed6a3c40cb154accae3974/aurjson_examples

関連するコード

  • python3-aurAUR パッケージには AUR のリモート JSON インターフェイスなど AUR のサービスを使用するための Python 3 モジュールが入っています。詳しくは python3-aur を参照。
  • jshon はコマンドラインから JSON をパース・読み込み・作成します。詳しくは jshon を参照。