2

我只在很小的意义上使用过 API,所以一段时间以来我一直想尝试如何做到这一点。好的,这就是我到目前为止所拥有的,它可以工作,但它会返回定义的所有内容。所以我有几个问题:

  1. 有没有办法只请求定义而不需要其他任何东西?
  2. 我只是解析数据吗?我在 Wordnik API 中看到了,我可以包含 XML 标记……那么我可以使用 XMLReader 来获取定义吗?
  3. 现在如何同时请求定义以及它是否是名词/动词/等?

最终目标是创建一个我可以使用的定义列表。任何帮助将不胜感激。到目前为止,这是我的代码:

class Program
{

    static void Main(string[] args)
    {
        string apiKey = "***************";
        string wordToSearch = "";

        do
         {
            Console.Write("Please type a word to get the definition: ");
            wordToSearch = Console.ReadLine();

            if (!wordToSearch.Equals("q"))
            {
                string url = "http://api.wordnik.com/v4/word.json/" + wordToSearch + "/definitions?api_key=" + apiKey;
                WebRequest request = WebRequest.Create(url);
                request.Method = "GET";
                request.ContentType = "application/json";

                using (WebResponse response = request.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        StreamReader reader = new StreamReader(stream);
                        string responseFromWordnik = reader.ReadToEnd();
                        Console.WriteLine(responseFromWordnik);
                    }
                }
            }

        } while (!wordToSearch.Equals("q"));
    }
}

谢谢,贾斯汀

4

2 回答 2

1
  1. API 文档可能会告诉您这一点。
  2. 是的,解析数据。如果数据以 XML 的形式出现,那么您可以使用 XMLReader 对其进行解析,或者将其加载到 XMLDocument 中。不过,看起来您要的是 JSON。如果是这样,您将需要一个 JSON 解析器。查看Json.Net
  3. 再次,查看 API 文档。

他们的文档页面非常稀少。您可能会在他们的 Google 小组或他们的支持页面上列出的其他来源之一上获得更好的响应。

于 2013-08-08T22:01:21.457 回答
1

这是获取单词定义的示例。您需要将 api 密钥替换为您自己的 api 密钥。

public class Word
{
    public string word { get; set; }
    public string sourceDictionary { get; set; }
    public string partOfSpeech { get; set; }
    public string text { get; set; }
}

public class WordList
{
    public List<Word> wordList { get; set; }
}


string url = "http://api.wordnik.com:80/v4/word.json/" + word + "/definitions?limit=200&includeRelated=false&sourceDictionaries=all&useCanonical=false&includeTags=false&api_key=a2a73e7b926c924fad7001ca3111acd55af2ffabf50eb4ae5";

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = WebRequestMethods.Http.Get;
webRequest.Accept = "application/json";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36";
webRequest.Referer = "http://developer.wordnik.com/docs.html";
webRequest.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
webRequest.Headers.Add("Accept-Language", "en-US,en;q=0.8");
webRequest.Host = "api.wordnik.com";

HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();

string enc = webResponse.ContentEncoding;
using (Stream stream = webResponse.GetResponseStream())
{
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    String responseString = "{\"wordList\":" + reader.ReadToEnd() + "}";

    if (responseString != null)
    {
        JavaScriptSerializer ser = new JavaScriptSerializer();
        WordList words = ser.Deserialize<WordList>(responseString);    

    }
}
于 2015-01-08T21:54:24.620 回答