2009-04-21 8 views
10

これは愚かに単純な問題かもしれませんが、私はWikipedia APIからデータを取得するためにpost webrequest/responseをフォーマットすることはできません。誰かが私の問題を見るのを助けることができるなら私は下に私のコードを掲示しました。Wikipedia APIに接続するためのWebRequest

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(); 
    } 
+1

一見したところでは、コードがよさそうですね。問題はどのようにして具体的に現れますか?例外は何ですか? –

+0

例外: リモートサーバーからエラーが返されました。(417)期待できませんでした。 – NickJ

+0

@NickJ:下のコードを試してみてください。出来た。 – Keltex

答えて

6

それは(あなたが唯一のウィキペディアのログインのために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(); 
    } 
} 

編集:彼はそれを設定することで解決することができるThe exception is : The remote server returned an error: (417) Expectation failed.、POSTリクエストにして経験していたその他の問題:

(これは元:HTTP POST Returns Error: 417 "Expectation Failed."

+0

ありがとうKeltex、 私は取得することができます簡単に仕事を十分に。 使用: WebRequest req = WebRequest.Create(address + "?" + data)as WebRequest; (WebResponse resp = req.GetResponse()をWebResponseとして使用) { StreamReader readme = new StreamReader(resp.GetResponseStream()); divWikiData.InnerText = readme.ReadToEnd(); } このポストリクエストはまだ私を傷つける - 私は、APIが許可するいくつかのアクションのためにポストが必要です.. – NickJ

+0

ニック、あなたのPOST要求が表示されている問題の種類をお知らせください。あなたはどういう例外がありますか?どのように行動していますか? –

+0

例外は次のとおりです。例外は次のとおりです。リモートサーバーからエラーが返されました。(417)Expectation failed。 – NickJ

0

HTTP POSTで入力データをプッシュしているようですが、HTTP GETを使用する必要があります。 MediaWikiのAPIドキュメントから

The API takes its input through parameters in the query string. Every module (and every action=query submodule) has its own set of parameters, which is listed in the documentation and in action=help, and can be retrieved through action=paraminfo. http://www.mediawiki.org/wiki/API:Data_formats

1

私は現在、C#MediaWiki APIの実装の最終段階にあり、MediaWikiのほとんどの表示や編集操作の簡単なスクリプト作成が可能です。

主なAPIはここにある: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; 
+0

リンクが壊れています。更新されたリンクがありますか? – Gabe

+1

申し訳ありませんが、私は最近このAPIをより中心的な場所に移しました。 http://o2platform.googlecode.com/svn/trunk/O2_Scripts/APIs/MediaWiki/OwaspWikiAPI.cs これは、そのファイルで使用される主なAPIである ます。http:/ あなたはここでそのファイルを見つけることができます/o2platform.googlecode.com/svn/trunk/O2_Scripts/APIs/MediaWiki/O2MediaWikiAPI.cs これは、APIS http://o2platform.googlecode.com/svn/trunk/の上に構築されたGUIツールです。 O2_Scripts/Tools/MediaWikiEditor.cs.o2 これらのスクリプトを試してみたい場合、それらはhttp://o2platform.com/から入手できるO2プラットフォームの一部です –

関連する問題