C#導入有道詞典單詞本到扇貝


由於扇貝查詞沒有有道方便,所以很多時候添加生詞都是在使用有道詞典,然后順手就保存到了有道單詞本,不過在扇貝記單詞可以打卡,記單詞更方便,進入扇貝頁面后發現扇貝單詞批量導入居然一次只支持10個,查了扇貝API是可以導入生詞的,於是想着何不利用c#批量導入單詞?說干就干!

准備工作

獲取扇貝token

首先需要扇貝賬號(這不廢話么),然后需要在扇貝上創建自己的應用,進入http://www.shanbay.com/developer/wiki/intro/,點擊我的應用創建扇貝應用,具體配置如下

注意回調地址

創建完應用后需要獲取token

client_id就是你的appkey,進入這個地址后會提示授權(先登錄自己的用戶),然后同意授權后會跳轉到一個網址,你會看到access_token,復制下來備用。

導出有道詞典

打開有道詞典->單詞本->瀏覽選項卡->管理->導出到文件->所有分類->導出為xml文件,備用。

開始編程

 思路

1) 扇貝單詞插入方法有兩個接口:一個是根據單詞獲取id,另一個根據ID添加單詞

2) 由於扇貝有單人賬戶導入限制(單用戶單app 200個/小時),如果導入單詞過多會被禁止訪問,所以需要加個定時器自動添加剩余單詞

核心代碼如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ImportNewWordsToShanbay
{
   public class ShanbayImportHelper
    {
       public static int GetShanbayWordID(string word, string access_token)
       {
           try
           {
               var result = HttpHelper.HttpGet("https://api.shanbay.com/bdc/search/", "word=" + word + "&access_token=" + access_token);
               JObject json = JObject.Parse(result);
               if (json.Property("status_code").Value.ToString() == "0")
               {
                   var wordId = JObject.Parse(json.Property("data").Value.ToString()).Property("id").Value.ToString();
                   return int.Parse(wordId);
               }
               else
                   return -1;
           }
           catch (Exception ex)
           {
               return 0; 
           }
       }

       public static bool AddNewWordToShanbay( int wordId,string access_token)
       {
           try
           {
               var data = "{\"id\":" + wordId + "}";
               var postResult = HttpHelper.HttpPost("https://api.shanbay.com/bdc/learning/", access_token, data);
               JObject postJsonResult = JObject.Parse(postResult);
               if (postJsonResult.Property("msg").Value.ToString().ToUpper() == "SUCCESS")
               {
                   return true;
               }
           }
           catch (Exception ex)
           {
 
           }
           return false;
       }
    }
}

Http幫助類

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Text;
using System.Threading.Tasks;

namespace ImportNewWordsToShanbay
{
   public class HttpHelper
    {
        public static string HttpPost(string Url, string token, string postDataStr)
        {
            Encoding encoding = Encoding.UTF8;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.ProtocolVersion = HttpVersion.Version11;
            request.Method = "POST";
            request.Headers.Add("Authorization", string.Format("Bearer {0}", token));
            request.ContentType = "application/json";
            request.Referer = null;
            request.AllowAutoRedirect = true;
            request.Accept = "*/*";
            byte[] buffer = encoding.GetBytes(postDataStr);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

public static string HttpGet(string Url, string postDataStr) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } } }

導入設置界面

導入狀態查看(定時自動導入剩余未導入單詞)

 

所有導入完成后查看扇貝單詞本,所有的單詞都加進去了。

Enjoy!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM