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编程

Download history 65/week @ 2024-04-14 52/week @ 2024-04-21 27/week @ 2024-04-28 42/week @ 2024-05-05 75/week @ 2024-05-12 68/week @ 2024-05-19 35/week @ 2024-05-26 219/week @ 2024-06-02 201/week @ 2024-06-09 98/week @ 2024-06-16 39/week @ 2024-06-23 54/week @ 2024-06-30 46/week @ 2024-07-07 47/week @ 2024-07-14 21/week @ 2024-07-21 157/week @ 2024-07-28

每月316次下载
7 个crates中使用 (5 直接)

MIT/Apache

125KB
2.5K SLoC

Build Status crates.io docs.rs

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(&params).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(&params).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-2.0许可定义,你故意提交给作品包含的贡献,将按照上述方式双重许可,不附加任何额外条款或条件。

依赖

~9–25MB
~405K SLoC