Webster Dictionary在线API的使用

Webster Dictionary在线API的使用


WebsterDictionary是一个在线词典,之前刚开放了API,可以访问:

http://www.dictionaryapi.com


今天我们介绍一下它的使用:



Webster Dictionary API有两种,一是免费的,但每月的查询次数不得超过1000条;另一种是商业的,需要联系Webster进行协商。我们以第一种API为例:



1.

打开http://www.dictionaryapi.com/products/index.htm,有好几种类型供我们选择:



他们都是类似的,有的是同义词反义词词典,有的是例句词典,返回的结果都封装在XML中(未来也可能用JSON返回)


但是我们每查一个词典,都需要注册一个Key。下面我们以第一个Merriam-Webster's Collegiate® Dictionary with Audio 细介绍



2.

首先要注册一个帐号:




3.

然后Webster会发送一封邮件给我们,点击其中包含的链接就注册成功了,同时得到了我们的Key,我们需要在查询Webster Dictionary时带上这个Key



下面介绍如何使用(官网有详细介绍):



4.

Merriam-Webster's Collegiate® Dictionary with Audio 返回的是XML格式的数据,以单词bin为例,发送:

http://www.dicitonaryapi.com/api/v1/references/collegiate/xml/bin?key=... (其中...是你之前获取的Key),返回的结果如下:




可以查看:

http://www.dictionaryapi.com/content/products/documentation/collegiate-tag-description.txt

获取完整的XML Tag的描述。



下面我只介绍常用的几个:


5.



6.



7.



8.



9.



10.




11.




12.














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个Kotlin代码的示例实现: 1. 创建一个名为WordActivity的活动,用于显示单词和定义: ```kotlin class WordActivity : AppCompatActivity() { private var wordList = mutableListOf<Word>() private var currentIndex = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_word) getWords() } private fun getWords() { // 使用API获取单词列表 val apiService = ApiClient.create() apiService.getWords().enqueue(object : Callback<List<Word>> { override fun onResponse(call: Call<List<Word>>, response: Response<List<Word>>) { if (response.isSuccessful) { wordList = response.body()!!.toMutableList() showWord(wordList[currentIndex]) } } override fun onFailure(call: Call<List<Word>>, t: Throwable) { Toast.makeText(this@WordActivity, "获取单词失败", Toast.LENGTH_SHORT).show() } }) } private fun showWord(word: Word) { tvWord.text = word.word tvDefinition.text = word.definition // 使用API获取例句 val apiService = ApiClient.create() apiService.getExample(word.word).enqueue(object : Callback<Example> { override fun onResponse(call: Call<Example>, response: Response<Example>) { if (response.isSuccessful) { tvExample.text = response.body()!!.text } } override fun onFailure(call: Call<Example>, t: Throwable) { tvExample.text = "例句获取失败" } }) } fun onKnow(view: View) { // 将当前单词添加到已背单词列表中 addKnownWord(wordList[currentIndex]) // 显示下一个单词 currentIndex++ if (currentIndex < wordList.size) { showWord(wordList[currentIndex]) } else { Toast.makeText(this, "已背完所有单词", Toast.LENGTH_SHORT).show() finish() } } fun onUnknow(view: View) { // 显示下一个单词 currentIndex++ if (currentIndex < wordList.size) { showWord(wordList[currentIndex]) } else { Toast.makeText(this, "已背完所有单词", Toast.LENGTH_SHORT).show() finish() } } private fun addKnownWord(word: Word) { // 将单词添加到已背单词列表中 val db = AppDatabase.getInstance(this) db.wordDao().insertWord(word) } fun onAddToVocabulary(view: View) { // 将当前单词添加到生词本列表中 val db = AppDatabase.getInstance(this) db.wordDao().insertVocabularyWord(wordList[currentIndex]) Toast.makeText(this, "生词已添加", Toast.LENGTH_SHORT).show() } fun onViewVocabulary(view: View) { // 跳转到查看生词本列表页面 val intent = Intent(this, VocabularyActivity::class.java) startActivity(intent) } fun onViewKnown(view: View) { // 跳转到查看已背单词列表页面 val intent = Intent(this, KnownActivity::class.java) startActivity(intent) } } ``` 2. 创建一个名为Word的数据类,用于保存单词和定义: ```kotlin data class Word( val word: String, val definition: String ) ``` 3. 创建一个名为Example的数据类,用于保存例句: ```kotlin data class Example( val text: String ) ``` 4. 创建一个ApiClient类,用于创建Retrofit实例并定义API接口: ```kotlin object ApiClient { private const val BASE_URL = "https://api.dictionary.com/" private val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() fun create(): ApiService { return retrofit.create(ApiService::class.java) } } interface ApiService { @GET("words") fun getWords(): Call<List<Word>> @GET("example/{word}") fun getExample(@Path("word") word: String): Call<Example> } ``` 5. 创建一个名为AppDatabase的类,用于创建SQLite数据库: ```kotlin @Database(entities = [Word::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun wordDao(): WordDao companion object { private var instance: AppDatabase? = null fun getInstance(context: Context): AppDatabase { if (instance == null) { instance = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "word_database" ).build() } return instance!! } } } @Entity(tableName = "known_words") data class KnownWord( @PrimaryKey val word: String, val definition: String ) @Entity(tableName = "vocabulary_words") data class VocabularyWord( @PrimaryKey val word: String, val definition: String ) @Dao interface WordDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertWord(word: Word) @Query("SELECT * FROM known_words") fun getKnownWords(): List<KnownWord> @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertVocabularyWord(word: Word) @Query("SELECT * FROM vocabulary_words") fun getVocabularyWords(): List<VocabularyWord> @Query("DELETE FROM vocabulary_words") fun deleteVocabularyWords() @Query("DELETE FROM known_words WHERE word = :word") fun deleteKnownWord(word: String) } ``` 6. 创建一个名为VocabularyActivity的活动,用于显示生词本列表: ```kotlin class VocabularyActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView private lateinit var adapter: WordAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_vocabulary) recyclerView = findViewById(R.id.recycler_view) recyclerView.layoutManager = LinearLayoutManager(this) adapter = WordAdapter() recyclerView.adapter = adapter getWords() } private fun getWords() { // 从SQLite中获取生词本列表 val db = AppDatabase.getInstance(this) val words = db.wordDao().getVocabularyWords() adapter.setData(words) } fun onDeleteAll(view: View) { // 清空生词本列表 val db = AppDatabase.getInstance(this) db.wordDao().deleteVocabularyWords() adapter.setData(emptyList()) } inner class WordAdapter : RecyclerView.Adapter<WordAdapter.ViewHolder>() { private var wordList = listOf<VocabularyWord>() fun setData(words: List<VocabularyWord>) { wordList = words notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_word, parent, false) return ViewHolder(view) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val word = wordList[position] holder.tvWord.text = word.word holder.tvDefinition.text = word.definition holder.btnDelete.setOnClickListener { // 从生词本列表中删除该单词 val db = AppDatabase.getInstance(this@VocabularyActivity) db.wordDao().deleteKnownWord(word.word) wordList = wordList.filter { it.word != word.word } notifyDataSetChanged() } } override fun getItemCount(): Int { return wordList.size } inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { val tvWord: TextView = view.findViewById(R.id.tv_word) val tvDefinition: TextView = view.findViewById(R.id.tv_definition) val btnDelete: Button = view.findViewById(R.id.btn_delete) } } } ``` 7. 创建一个名为KnownActivity的活动,用于显示已背单词列表: ```kotlin class KnownActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView private lateinit var adapter: WordAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_known) recyclerView = findViewById(R.id.recycler_view) recyclerView.layoutManager = LinearLayoutManager(this) adapter = WordAdapter() recyclerView.adapter = adapter getWords() } private fun getWords() { // 从SQLite中获取已背单词列表 val db = AppDatabase.getInstance(this) val words = db.wordDao().getKnownWords().map { VocabularyWord(it.word, it.definition) } adapter.setData(words) } inner class WordAdapter : RecyclerView.Adapter<WordAdapter.ViewHolder>() { private var wordList = listOf<VocabularyWord>() fun setData(words: List<VocabularyWord>) { wordList = words notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_word, parent, false) return ViewHolder(view) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val word = wordList[position] holder.tvWord.text = word.word holder.tvDefinition.text = word.definition holder.btnDelete.setOnClickListener { // 从已背单词列表中删除该单词 val db = AppDatabase.getInstance(this@KnownActivity) db.wordDao().deleteKnownWord(word.word) wordList = wordList.filter { it.word != word.word } notifyDataSetChanged() } } override fun getItemCount(): Int { return wordList.size } inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { val tvWord: TextView = view.findViewById(R.id.tv_word) val tvDefinition: TextView = view.findViewById(R.id.tv_definition) val btnDelete: Button = view.findViewById(R.id.btn_delete) } } } ``` 以上就是一个简单的背单词app的Kotlin实现。注意,这只是一个示例,实际开发中还需要考虑很多其他的细节和问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值