2012-01-22 4 views
0

Comment se connecter à XML-RPC Api de C#,Comment se connecter à XML-RPC de C#

Un client peut interagir avec un Pandorabot par POST'ing à:

http://www.pandorabots.com/pandora/talk-xml Les variables forment la le client doit POST sont:

botid - voir H.1 ci-dessus. entrée - ce que vous voulez dire au bot. custid - un ID pour suivre la conversation avec un client particulier. Cette variable est facultative. Si vous n'envoyez pas de valeur, Pandorabots renvoie une valeur d'attribut custid dans l'élément du code XML renvoyé. Utilisez-le dans les POST suivants pour poursuivre une conversation.

Comment appeler?

+1

Quelles recherches avez-vous fait? Qu'avez-vous essayé? Rencontrez-vous une erreur spécifique que nous pouvons vous aider à contourner? –

+0

Copie possible de: http://stackoverflow.com/questions/1348503/how-to-use-xmlrpc-in-c-sharp. Bien qu'ils ont au moins montré un petit effort. –

+0

Ce n'est pas une copie de cette question, Ce que j'ai essayé de faire est d'envoyer une requête http à cette api et demander la sortie. Im nouveau à XML-RPC, je n'ai aucune idée de comment cela fonctionne. C'est la documentation qu'ils ont fourni http://pastebin.com/7qAX2t8m, je n'ai aucune idée comment entrer les variables et envoyer la demande et obtenir respone, pouvez-vous s'il vous plaît aider –

Répondre

1

Cela devrait vous y aller:

public void Talk() 
    { 
     string xmlResult = null; 
     Result result = null; // Result declared at the end 
     string botId = "c49b63239e34d1"; // enter your botid 
     string talk = "Am I a human?"; 
     string custId = null; // (or a value) 
     using (var wc = new WebClient()) 
     { 
      var col = new NameValueCollection(); 

      col.Add("botid", botId); 
      col.Add("input", talk); 
      if (!String.IsNullOrEmpty(custId)) 
      { 
       col.Add("custid", custId); 
      } 

      byte[] xmlResultBytes = wc.UploadValues(
       @"http://www.pandorabots.com/pandora/talk-xml", 
       "POST", 
       col); 
      xmlResult = UTF8Encoding.UTF8.GetString(xmlResultBytes); 
      result = Result.GetInstance(xmlResultBytes); 
     } 

     //raw result 
     Console.WriteLine(xmlResult); 

     // use the Result class 
     if (result.status == 0) // no error 
     { 
      Console.WriteLine("{0} -> {1}", 
       result.input, result.that); 
     } 
     else // error 
     { 
      Console.WriteLine("Error: {0} : {1}", 
       result.input, result.message); 
     } 
    } 


[XmlRoot(ElementName="result")] 
public class Result 
{ 
    static XmlSerializer ser = new XmlSerializer(typeof(Result) , ""); 

    public Result() 
    { 
    } 

    public static Result GetInstance(byte[] bytes) 
    { 
     return (Result)ser.Deserialize(new MemoryStream(bytes)); 
    } 

    [XmlAttribute] 
    public int status { get; set; } 
    [XmlAttribute] 
    public string botid { get; set; } 
    [XmlAttribute] 
    public string custid { get; set; } 
    [XmlElement] 
    public string input { get; set; } 
    [XmlElement] 
    public string that { get; set; } 
    [XmlElement] 
    public string message { get; set; } 
} 
+0

Qu'est-ce que "Résultat" dans Résultat de résultat = null ;, It me donne une erreur, est-ce un type de données? –

+0

YAH, mon mauvais j'ai vu la déclaration publique ci-dessous, Ok. Merci cela a fonctionné parfaitement, Pouvez-vous fournir la version C++, j'ai essayé de mais les fonctions me donnent l'erreur –

+0

Non, je Je ne suis pas un développeur C++ Vous avez étiqueté votre question avec C#, donc c'est ce que vous obtenez :-) Vous pouvez marquer ma réponse comme correcte, essayez pour vous-même d'obtenir l'implémentation pour C++ et quand vous Vous êtes bloqué poser une nouvelle question, en montrant votre code et en référençant cette question et la réponse.Stackoverflow n'est pas implémentation C++ bot :-) – rene