service4mydictionary

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 18, 2019 License: Apache-2.0 Imports: 9 Imported by: 2

README

Service for MYDICTIONARY

简体中文版

The repo is a dependency of MYDICTIONARY which version is <= v3.0.0.

1. Introduction

It is a module provides services with cache support for MYDICTIONARY.

2. Cache

This module is able to cache query result from services. It can increase the speed of online query considerably.

2.1. Data Structure
type CacheItemStruct struct {
	QueryString  string   `json:"queryString"`
	Word         string   `json:"word"`
	Definition   []string `json:"definition"`
	Status       string   `json:"status"`
	CreationTime int64    `json:"creationTime"`
}

CacheItemStruct is a structure and has got these members:

  • QueryString indicates the string of query.
  • Word indicates the word.
  • Definition indicates definitions.
  • Status indicates the status.
  • CreationTime is a unix timestamp which indicates when this item is created.
type CacheStruct struct {
	path         string
	shelfLifeDay int64
	Content      []CacheItemStruct `json:"content"`
}

CacheStruct is a structure.

It has got a public member Content which stores all cache items.

2.2. Member Function
func (cache *CacheStruct) Read(path string, shelfLifeDay int64) (err error)

The function is used for reading cache from a JSON file indicates by path, and set the life period in days for all cache items by shelfLifeDay.

  • If the file indicated by path is not existent, create it.
  • If shelfLifeDay is 0, cache will never expire.

After reading cache, each item will be checked whether it is expired (determined by its CreationTime, cache's shelfLifeDay and the current time). Then, all expired items will be removed.

func (cache *CacheStruct) Query(queryString string) (item ItemStruct, err error)

The function is used for searching queryString from cache.

func (cache *CacheStruct) Add(item ItemStruct)

The function is used for adding item to cache.

func (cache *CacheStruct) Write()

The function is used for writing cache to the JSON file which it comes from.

3. Service
3.1. Interface

All services should obey the following interface.

type ServiceInterface interface {
	GetServiceName() string
	GetCache() *CacheStruct
	Query(vocabulary4mydictionary.VocabularyAskStruct) vocabulary4mydictionary.VocabularyAnswerStruct
}
3.1.1. GetServiceName
func (service *ServiceInterface) GetServiceName()

This function return the name of the service.

3.1.2. GetCache
func (service *ServiceInterface) GetCache()

This function return the pointer of the cache of the service .

3.1.3. Query
func (service *ServiceInterface) Query(vocabularyAsk vocabulary4mydictionary.VocabularyAskStruct) (vocabularyAnswer vocabulary4mydictionary.VocabularyAnswerStruct)

This function is used for querying the vocabulary.

3.2. Currently Supported Service
3.2.1. Bing Dictionary

http://cn.bing.com/dict/

type BingDictionaryStruct struct {
	cache CacheStruct
}
3.2.2. iCIBA Collins

http://www.iciba.com/

type IcibaCollinsStruct struct {
	cache CacheStruct
}
3.2.3. Merriam Webster

https://www.merriam-webster.com/

type MerriamWebsterStruct struct {
	cache CacheStruct
}
3.3. Create Service by Yourself
  • Create a new ".go" file in this package.
  • Copy the code below to the file (it is a good idea to use goquery for grasping content from webpage).
package service4mydictionary

import (
	"net/url"
	"time"

	"github.com/PuerkitoBio/goquery"
	"github.com/zzc-tongji/vocabulary4mydictionary"
)

const serviceName = "Service"

//
// NOTE:
// 1. Change "Service" above to your service name.
// 2. Rename all "ServiceStruct" below in this file.
// 3. Delete this note in your service.
//

// ServiceStruct : service struct
type ServiceStruct struct {
	cache CacheStruct
}

// GetServiceName : get service name
func (service *ServiceStruct) GetServiceName() (value string) {
	value = serviceName
	return
}

// GetCache : get cache
func (service *ServiceStruct) GetCache() (cache *CacheStruct) {
	cache = &service.cache
	return
}

// Query : query vocabulary
func (service *ServiceStruct) Query(vocabularyAsk vocabulary4mydictionary.VocabularyAskStruct) (vocabularyAnswer vocabulary4mydictionary.VocabularyAnswerStruct) {
	var (
		err         error
		queryString string
		item        CacheItemStruct
	)
	// set
	vocabularyAnswer.SourceName = serviceName
	vocabularyAnswer.Location.TableType = vocabulary4mydictionary.Online
	vocabularyAnswer.Location.TableIndex = -1
	vocabularyAnswer.Location.ItemIndex = -1
	// query cache
	queryString = url.QueryEscape(vocabularyAsk.Word)
	item, err = service.cache.Query(queryString)
	if err == nil {
		goto SET
	}
	// query online
	//
	// NOTE:
	// 1. Add your code here.
	// 2. If success, "item.Status" should be "vocabulary4mydictionary.Basic";
	//    else, set "item.Status" as your debug information and jump to label 'ADD' immidiately.
	// 3. To help you debug this function,
	//    set "online.debug" in file "mydictionary.setting.json" as "true".
	//    At this time, MYDICTIONARY will show off the debug information.
	// 4. Set "online.debug" in file "mydictionary.setting.json" as "false"
	//    to let MYDICTIONARY will hide the debug information
	// 5. Delete this note in your service.
	//
ADD:
	// add to cache
	item.QueryString = queryString
	item.CreationTime = time.Now().Unix()
	service.cache.Add(item)
SET:
	// set
	vocabularyAnswer.Word = item.Word
	vocabularyAnswer.Definition = item.Definition
	vocabularyAnswer.Status = item.Status
	return
}
  • Modify the file based on annotations begin with NOTE.
  • Update setting.go in MYDICTIONARY based on annotations begin with NOTE.
  • Use pull request to commit your modification, and help to improve MYDICTIONARY (optional).
4. Others
  • All code files are edited by Atom.
  • All ".md" files are edited by Typora.
  • The style of all ".md" files is Github Flavored Markdown.
  • There is a LF (Linux) at the end of each line.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BingDictionaryStruct

type BingDictionaryStruct struct {
	// contains filtered or unexported fields
}

BingDictionaryStruct : Bing Dictionary struct

func (*BingDictionaryStruct) GetCache

func (service *BingDictionaryStruct) GetCache() (cache *CacheStruct)

GetCache : get cache

func (*BingDictionaryStruct) GetServiceName

func (service *BingDictionaryStruct) GetServiceName() (value string)

GetServiceName : get service name

func (*BingDictionaryStruct) Query

Query : query vocabulary

type CacheItemStruct

type CacheItemStruct struct {
	QueryString  string   `json:"queryString"`
	Word         string   `json:"word"`
	Definition   []string `json:"definition"`
	Status       string   `json:"status"`
	CreationTime int64    `json:"creationTime"`
}

CacheItemStruct : item struct

type CacheStruct

type CacheStruct struct {
	Content []CacheItemStruct `json:"content"`
	// contains filtered or unexported fields
}

CacheStruct : cache struct

func (*CacheStruct) Add

func (cache *CacheStruct) Add(item CacheItemStruct)

Add : add item to cache

func (*CacheStruct) Query

func (cache *CacheStruct) Query(queryString string) (item CacheItemStruct, err error)

Query : query item in cache

func (*CacheStruct) Read

func (cache *CacheStruct) Read(path string, shelfLifeDay int64) (err error)

Read : read cache

func (*CacheStruct) Write

func (cache *CacheStruct) Write() (information string, err error)

Write : write cache

type IcibaCollinsStruct

type IcibaCollinsStruct struct {
	// contains filtered or unexported fields
}

IcibaCollinsStruct : iCIBA Collins struct

func (*IcibaCollinsStruct) GetCache

func (service *IcibaCollinsStruct) GetCache() (cache *CacheStruct)

GetCache : get cache

func (*IcibaCollinsStruct) GetServiceName

func (service *IcibaCollinsStruct) GetServiceName() (value string)

GetServiceName : get service name

func (*IcibaCollinsStruct) Query

Query : query vocabulary

type MerriamWebsterStruct

type MerriamWebsterStruct struct {
	// contains filtered or unexported fields
}

MerriamWebsterStruct : Merriam Webster struct

func (*MerriamWebsterStruct) GetCache

func (service *MerriamWebsterStruct) GetCache() (cache *CacheStruct)

GetCache : get cache

func (*MerriamWebsterStruct) GetServiceName

func (service *MerriamWebsterStruct) GetServiceName() (value string)

GetServiceName : get service name

func (*MerriamWebsterStruct) Query

Query : query vocabulary

type ServiceInterface

type ServiceInterface interface {
	GetServiceName() string
	GetCache() *CacheStruct
	Query(vocabulary4mydictionary.VocabularyAskStruct) vocabulary4mydictionary.VocabularyAnswerStruct
}

ServiceInterface : service interface

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL