2009-04-21 10 views
10

Questo può essere un problema pateticamente semplice, ma io non riesco a formattare il messaggio di WebRequest/risposta per ottenere i dati dal Wikipedia API. Ho pubblicato il mio codice qui sotto se qualcuno può aiutarmi a vedere il mio problema.WebRequest per connettersi al API Wikipedia

+1

A prima vista sei il codice sembra buono. Come si presenta in modo specifico il problema? Qual è l'eccezione? –

+0

L'eccezione è: Il server remoto ha restituito un errore: (417) Expectation non riuscita. – NickJ

+0

@NickJ: Prova il mio codice qui sotto. Ha funzionato. – Keltex

risposta

6

Si potrebbe desiderare di provare una richiesta GET prima perché è un po 'più semplice (si avrà solo bisogno di POST per il login wikipedia). Ad esempio, provare a simulare questa richiesta:

http://en.wikipedia.org/w/api.php?action=query&prop=images&titles=Main%20Page

Ecco il codice:

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

Edit: L'altro problema che stava sperimentando sulla richiesta POST è stato, The exception is : The remote server returned an error: (417) Expectation failed. Si può essere risolto impostando :

(Questo da: HTTP POST Returns Error: 417 "Expectation Failed.")

+0

Grazie Keltex, posso ottenere il Get a lavorare abbastanza facilmente. utilizzando: WebRequest req = WebRequest.Create (indirizzo + "?" + Dati) come WebRequest; utilizzando (WebResponse resp = req.GetResponse() come risposta Web) { Readme di streamReader = new StreamReader (resp.GetResponseStream()); divWikiData.InnerText = readme.ReadToEnd(); } Questa richiesta Inserisci mi ha caratteristiche sgrassanti ancora - e ho bisogno Post per alcune delle azioni della API consente .. – NickJ

+0

Nick, può per favore farci sapere che tipo di problema vostra richiesta POST sta visualizzando. Qual è l'eccezione che ottieni? Come si sta comportando? –

+0

L'eccezione è: l'eccezione è: il server remoto ha restituito un errore: (417) Expectation non riuscita. – NickJ

0

Sembra che tu stia spingendo i dati di input su HTTP POST, ma sembra che tu debba utilizzare HTTP GET.

Dalla documentazione API MediaWiki:

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

Sono attualmente nelle fasi finali di attuazione di un'API C# MediaWiki che consente la semplice script della maggior parte delle azioni di visualizzazione e la modifica di MediaWiki.

L'API principale è qui: http://o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs e qui è un esempio di API in uso:

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

Il collegamento è rotto. Hai un link aggiornato? – Gabe

+1

Mi dispiace, ho spostato l'API di recente in una posizione più centrale. Potete trovare il file qui: http://o2platform.googlecode.com/svn/trunk/O2_Scripts/APIs/MediaWiki/OwaspWikiAPI.cs questo è l'API principale utilizzato su quel file http://o2platform.googlecode.com/svn/trunk/O2_Scripts/APIs/MediaWiki/O2MediaWikiAPI.cs e questo è uno strumento GUI costruito sulla cima di queste API http://o2platform.googlecode.com/svn/trunk/ O2_Scripts/Tools/MediaWikiEditor.cs.o2 Se vuoi provare questi script, fanno parte della piattaforma O2 che puoi ottenere da http://o2platform.com/ –