• WP8.1小梦词典开发1:金山词霸API使用


    原文出自:http://www.bcmeng.com/windows-phone-api/

    今天开始小梦给大家分享一下小梦词典开发中几个关键问题,首先我们来看查词功能的实现.小梦词典的查词功能是通过金山词霸的查词API来实现的.首先我们需要申请金山词霸API的key:

    金山词霸API的key申请:

    申请地址:http://open.iciba.com/?c=api#jhjy   进入后输入您的网站名,网站地址和你的邮箱就可以,key会发送到你的邮箱里.我试过了,网站名和网站地址可以随意填写,只要邮箱是你的就可以.

    金山词霸查词API数据返回格式:

    <?xml version="1.0" encoding="UTF-8"?>
    
    -<dict name="219" id="219" num="219">
    
    <key>love</key>
    
    <ps>lʌv</ps>
    
    <pron>http://res.iciba.com/resource/amp3/oxford/0/4f/5b/4f5bbc0f19c33e5f1a0b6b974b4eacce.mp3</pron>
    
    <ps>lʌv</ps>
    
    <pron>http://res.iciba.com/resource/amp3/1/0/b5/c0/b5c0b187fe309af0f4d35982fd961d7e.mp3</pron>
    
    <pos>vt.& vi.</pos>
    
    <acceptation>爱,热爱;爱戴;喜欢;赞美,称赞; </acceptation>
    
    <pos>vt.</pos>
    
    <acceptation>喜爱;喜好;喜欢;爱慕; </acceptation>
    
    <pos>n.</pos>
    
    <acceptation>爱情,爱意;疼爱;热爱;爱人,所爱之物; </acceptation>
    
    -<sent>
    
    <orig> They happily reflect the desire for a fusional love that inspired the legendary LOVE bracelet Cartier. </orig>
    
    <trans> 快乐地反映出为富有传奇色彩的卡地亚LOVE手镯所赋予的水乳交融之爱恋情愫. </trans>
    
    </sent>
    
    -<sent>
    
    <orig> Love is the radical of lovely , loveliness , and loving. </orig>
    
    <trans> Love是lovely, loveliness 及loving的词根. </trans>
    
    </sent>
    
    -<sent>
    
    <orig> She rhymes " love " with " dove ". </orig>
    
    <trans> 她将 " love "" dove " 两字押韵. </trans>
    
    </sent>
    
    -<sent>
    
    <orig> In sports, love means nil. </orig>
    
    <trans> 体育中, love的意思是零. </trans>
    
    </sent>
    
    -<sent>
    
    <orig> Ludde Omholt with his son, Love, in S ? derma a bohemian and culturally rich district in Stockholm. </orig>
    
    <trans> LuddeOmholt和他的儿子Love在南城 —— 斯德哥尔摩市 的一个充满波西米亚风情的文化富饶区散步. </trans>
    
    </sent>
    
    </dict>
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net.Http;
    using System.Runtime.InteropServices.WindowsRuntime;
    using System.Threading.Tasks;
    using System.Xml.Linq;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.Networking.Connectivity;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    namespace jinshanAPI
    {
    
        public sealed partial class MainPage : Page
        {
             string keyWord = null;
            HttpClient httpClient = null;
            public static string loadKey = "1F9CA812CB18FFDFC95FC17E9C57A5E1";
            public MainPage()
            {
                this.InitializeComponent();
    
                this.NavigationCacheMode = NavigationCacheMode.Required;
                httpClient = new HttpClient();
                httpClient.MaxResponseContentBufferSize = 256000;//缓冲的最大字节数
                httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");//发送的标题
            }
    
            private void txtKeywords_KeyDown(object sender, KeyRoutedEventArgs e)
            {
                if (e.Key == Windows.System.VirtualKey.Enter)
                {
                    Search();
                }
            }
    
            async void Search()
            {
                bool isOnline = CheckNetwork();
                if (isOnline)
                {
                    string temp = txtKeywords.Text.Trim();
                    if (temp != keyWord && !string.IsNullOrEmpty(temp))
                    {
                        keyWord = temp;
                        await SearchWordFromAPI(keyWord);
                    }
                }
    
            }
    
            private async Task<bool> SearchWordFromAPI(string keyWord)
            {
                bool haveResult = false;
                string url = "http://dict-co.iciba.com/api/dictionary.php?w=" + keyWord + "&key=" + loadKey;
                XDocument xResult = null;
                try
                {
                    HttpResponseMessage response = await httpClient.GetAsync(url);
                    Stream responseBodyAsStream = await response.Content.ReadAsStreamAsync();
                    xResult = XDocument.Load(responseBodyAsStream);
                    XElement dict = null;
                    if (xResult != null)
                    {
                        dict = xResult.Root;
                    }
                    if (dict.Elements().Count() <= 1)
                    {
                        txtMag.Visibility = Visibility.Visible;
                        spResult.Visibility = Visibility.Collapsed;
                        txtMag.Text = "亲:对不起!没有找到" + keyWord + "的相关词典解释";
                    }
                    else
                    {
                        haveResult = true;
                        txtMag.Visibility = Visibility.Collapsed;
                        spResult.Visibility = Visibility.Visible;
    
                        IEnumerable<XElement> pss = dict.Elements(XName.Get("ps"));
                        if (pss.Count() == 2)
                        {
                            spPron.Visibility = Visibility.Visible;
                            List<XElement> psList = pss.ToList();
                            txtPsUK.Text = "英:" + "[" + psList[0].Value + "]";
                            txtPsUs.Text = "美:" + "[" + psList[1].Value + "]";
                        }
                        else if (pss.Count() == 1)
                        {
                            spPron.Visibility = Visibility.Visible;
                            XElement ps = pss.FirstOrDefault();
                            txtPsUK.Text = "[" + ps.Value + "]";
                            txtPsUs.Text = string.Empty;
                        }
                        else
                        {
                            txtPsUK.Text = string.Empty;
                            txtPsUs.Text = string.Empty;
                            spPron.Visibility = Visibility.Collapsed;
                        }
    
                        IEnumerable<XElement> prons = dict.Elements(XName.Get("pron"));
                        if (prons.Count() == 2)
                        {
                            List<XElement> pronlist = prons.ToList();
                            mePronUK.Source = new Uri(pronlist[0].Value);
                            mePronUs.Source = new Uri(pronlist[1].Value);
                            btnPronUK.Visibility = Visibility.Visible;
                            btnPronUs.Visibility = Visibility.Visible;
                        }
                        else if (prons.Count() == 1)
                        {
                            XElement pron = prons.FirstOrDefault();
                            mePronUK.Source = new Uri(pron.Value);
                            btnPronUK.Visibility = Visibility.Visible;
                            btnPronUs.Visibility = Visibility.Collapsed;
                        }
                        else
                        {
                            btnPronUK.Visibility = Visibility.Collapsed;
                            btnPronUs.Visibility = Visibility.Collapsed;
                        }
                        IEnumerable<XElement> poss = dict.Elements(XName.Get("pos"));
                        List<string> posList = new List<string>();
                        if (poss.Count() > 0)
                        {
                            foreach (XElement pos in poss)
                            {
                                posList.Add(pos.Value);
                            }
                        }
    
                        IEnumerable<XElement> acceptations = dict.Elements(XName.Get("acceptation"));
                        spAcceptions.Children.Clear();
                        if (acceptations.Count() > 0)
                        {
                            int i = 0;
                            foreach (XElement acceptation in acceptations)
                            {
                                TextBlock textAcceptation = new TextBlock();
                                textAcceptation.FontSize = 20;
                                textAcceptation.TextWrapping = TextWrapping.Wrap;
                                textAcceptation.Margin = new Thickness(0);
                                textAcceptation.Text = posList[i] + acceptation.Value;
                                i++;
                                spAcceptions.Children.Add(textAcceptation);
                            }
                        }
    
                        IEnumerable<XElement> sents = dict.Elements(XName.Get("sent"));
                        spSends.Children.Clear();
                        if (sents.Count() > 0)
                        {
                            foreach (XElement sent in sents)
                            {
                                XElement orig = sent.Element(XName.Get("orig"));
                                TextBlock textOrig = new TextBlock();
                                textOrig.FontSize = 20;
                                textOrig.TextWrapping = TextWrapping.Wrap;
                                textOrig.Text = orig.Value;
                                spSends.Children.Add(textOrig);
                                XElement trans = sent.Element(XName.Get("trans"));
                                TextBlock textTrans = new TextBlock();
                                textTrans.FontSize = 20;
                                textTrans.TextWrapping = TextWrapping.Wrap;
                                textTrans.Text = trans.Value;
                                spSends.Children.Add(textTrans);
                            }
                        }
    
                    }
                }
                catch
                {
                    txtMag.Visibility = Visibility.Visible;
                    spResult.Visibility = Visibility.Collapsed;
                    txtMag.Text = "亲:网络访问失败!";
                }
    
                return haveResult;
            }
    
            bool CheckNetwork()
            {
                bool isOnline = false;
                ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
                if (InternetConnectionProfile == null)
                {
                    txtMag.Visibility = Visibility.Visible;
                    spResult.Visibility = Visibility.Collapsed;
                    txtMag.Text = "亲:断网情况下无法显示词典内容!";
    
                }
                else
                {
                    isOnline = true;
                }
                return isOnline;
            }
    
            private void btnPronUK_Click(object sender, RoutedEventArgs e)
            {
                mePronUK.Play();
            }
    
            private void txtPronUs_Click(object sender, RoutedEventArgs e)
            {
                mePronUs.Play();
            }
        }
    }

    源代码下载:

    点我下载!

  • 相关阅读:
    动画02
    动画01
    css过渡
    06强制类型转换
    05强制类型转换
    jetson 安装opencv4.4.0
    cpp中的内置异常
    cpp中std::string和std::wstring 相互转换
    qt creator杂记
    win10 git bash 使用vim 显示 git log
  • 原文地址:https://www.cnblogs.com/xdoudou/p/3945172.html
Copyright © 2020-2023  润新知