47 个发布版本
0.3.1 | 2024年6月11日 |
---|---|
0.2.15 | 2024年4月2日 |
0.2.14 | 2024年3月5日 |
0.2.11 | 2023年8月22日 |
0.1.5 | 2019年3月26日 |
#125 in Web编程
每月316次下载
在 7 个crates中使用 (5 直接)
125KB
2.5K SLoC
Rust的MediaWiki客户端库
示例
获取英文维基百科上“Albert Einstein”的所有类别
let api = mediawiki::api_sync::ApiSync::new("https://en.wikipedia.org/w/api.php").unwrap();
// Query parameters
let params = api.params_into(&[
("action", "query"),
("prop", "categories"),
("titles", "Albert Einstein"),
("cllimit", "500"),
]);
// Run query; this will automatically continue if more results are available, and merge all results into one
let res = api.get_query_api_json_all(¶ms).unwrap();
// Parse result
let categories: Vec<&str> = res["query"]["pages"]
.as_object()
.unwrap()
.iter()
.flat_map(|(_page_id, page)| {
page["categories"]
.as_array()
.unwrap()
.iter()
.map(|c| c["title"].as_str().unwrap())
})
.collect();
dbg!(&categories);
编辑 Wikidata 沙盒项目(作为机器人)
let mut api = mediawiki::api::Api::new("https://www.wikidata.org/w/api.php").unwrap();
api.login("MY BOT USER NAME", "MY BOT PASSWORD").unwrap();
let token = api.get_edit_token().unwrap();
let params = api.params_into(&[
("action", "wbeditentity"),
("id", "Q4115189"),
("data", r#"{"claims":[{"mainsnak":{"snaktype":"value","property":"P1810","datavalue":{"value":"ExampleString","type":"string"}},"type":"statement","rank":"normal"}]}"#),
("token", &token),
]);
let res = api.post_query_api_json(¶ms).unwrap();
dbg!(res);
通过OAuth进行编辑
let json = json!({"g_consumer_key":"YOUR_CONSUMER_KEY","g_token_key":"YOUR_TOKEN_KEY"});
let oauth = mediawiki::api::OAuthParams::new_from_json(&json);
let mut api = mediawiki::api::Api::new("https://www.wikidata.org/w/api.php").unwrap();
api.set_oauth(Some(oauth));
使用SPARQL查询 Wikidata
let api = mediawiki::api::Api::new("https://www.wikidata.org/w/api.php").unwrap(); // Will determine the SPARQL API URL via site info data
let res = api.sparql_query ( "SELECT ?q ?qLabel ?fellow_id { ?q wdt:P31 wd:Q5 ; wdt:P6594 ?fellow_id . SERVICE wikibase:label { bd:serviceParam wikibase:language '[AUTO_LANGUAGE],en'. } }" ).unwrap() ;
println!("{}", ::serde_json::to_string_pretty(&res).unwrap());
许可
许可方式为以下之一
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据Apache-2.0许可定义,你故意提交给作品包含的贡献,将按照上述方式双重许可,不附加任何额外条款或条件。
依赖
~9–25MB
~405K SLoC