WikipediaのAPIに接続するWebRequestクラス
-
12-09-2019 - |
質問
これは哀れ簡単な問題かもしれないが、私は<のhref =「http://en.wikipedia.org/wiki/Wikipedia:API」のrel =からデータを取得するためのポストのWebRequest /応答をフォーマットするように見えることはできません"nofollowをさnoreferrer"> WikipediaのAPI に。誰も私には私の問題を見るのを助けることができれば、私は以下の私のコードを掲載している。
string pgTitle = txtPageTitle.Text;
Uri address = new Uri("http://en.wikipedia.org/w/api.php");
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string action = "query";
string query = pgTitle;
StringBuilder data = new StringBuilder();
data.Append("action=" + HttpUtility.UrlEncode(action));
data.Append("&query=" + HttpUtility.UrlEncode(query));
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream.
StreamReader reader = new StreamReader(response.GetResponseStream());
divWikiData.InnerText = reader.ReadToEnd();
}
解決
あなたはそれが少し簡単ですので、(あなたが唯一のウィキペディアのログインのためにPOSTする必要があります)最初のGETリクエストをしようとする場合があります。例えば、この要求をシミュレートしてみます:
http://en.wikipedia.org /w/api.php?action=query&prop=images&titles=Main%20Pageする
ここでは、コードです。
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create("http://en.wikipedia.org/w/api.php?action=query&prop=images&titles=Main%20Page");
using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse())
{
string ResponseText;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
ResponseText = reader.ReadToEnd();
}
}
の編集の彼はPOSTリクエストに経験していた他の問題は、それを設定することで解決することができますThe exception is : The remote server returned an error: (417) Expectation failed.
たます:
System.Net.ServicePointManager.Expect100Continue = false;
(これがあるから: HTTP POSTの戻り値エラー:417 "期待に失敗しました" の)
他のヒント
私が最もMediaWikiの表示と編集行為の簡単なスクリプトを可能にするC#のMediaWiki APIを実装の最終段階で、現在です。
主なAPIはここにある:<のhref = "http://o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs" のrel =「nofollowをnoreferrer」> http://o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs と、ここでの例であります使用中のAPIます:
var wiki = new O2MediaWikiAPI("http://www.o2platform.com/api.php");
wiki.login(userName, password);
var page = "Test"; // "Main_Page";
wiki.editPage(page,"Test content2");
var rawWikiText = wiki.raw(page);
var htmlText = wiki.html(page);
return rawWikiText.line().line() + htmlText;
あなたは、HTTP POSTに入力されたデータをプッシュしているように見えるが、あなたがHTTP GETを使用する必要がありそうです。
MediaWikiのAPIドキュメントから:
APIを通じた入力を受け取り クエリ文字列のパラメータ。すべての モジュール(およびすべてのアクションクエリ= サブモジュール)の独自のセットを持っています にリストされたパラメータ、 ドキュメントやアクションで=ヘルプ、 介して検索することができます アクション= paraminfo。 http://www.mediawiki.org/wiki/API:Data_formatsする