Documentation
¶
Index ¶
- Constants
- Variables
- func ChineseStringEqual(a, b string) bool
- func ComplementTracksImage()
- func CrawlPlaylistsAndTracks(seed string, maxNum int)
- func FetchTracks(client *spotify.Client, playlist *spotify.SimplePlaylist) <-chan spotify.FullTrack
- func FindPlaylist(client *spotify.Client, w string) <-chan spotify.SimplePlaylist
- func InitAll(configfile string)
- func InitAuth()
- func InitConfig(configfile string)
- func InitDB()
- func InitSeenPlaylists()
- func InitSeenWords()
- func InitT2S() error
- func NewSpotifyClient() *spotify.Client
- func RemovePunct(s string) string
- func Save(playlist *Playlist)
- func SeenPlaylist(id string) bool
- func SeenWord(w string) bool
- func T2S(t string) (string, error)
- func UpdateTracks(where string)
- type Artist
- type AudioFeatures
- type AuthError
- type AuthResp
- type Playlist
- type Track
- type TrackQuery
Constants ¶
const ( PlaylistPageLimit = 50 PlaylistPageMaxOffset = 1000 )
Paging of playlist searching https://developer.spotify.com/documentation/web-api/reference/#/operations/search
const SeenDebug = false
const (
TracksPageLimit = 50
)
const (
UpdateTracksBatchSize = 32 // < 50
)
Variables ¶
var AuthHolder = &authHolder{}
AuthHolder global spotify token holder 单例
var Config struct { ClientID string `json:"client_id"` ClientSecret string `json:"client_secret"` DB string `json:"db"` Profile string `json:"profile"` Seed string `json:"seed"` Playlists int `json:"playlists"` SeenWords []string `json:"seen_words"` UpdateTracksWorkers int `json:"update_tracks_workers"` }
var DB *gorm.DB
DB 全局的数据库单例
var ErrTrackNotFound = errors.New("no matching track")
var SearchTrackLimit = 5
Functions ¶
func ChineseStringEqual ¶
ChineseStringEqual checks if string a == b **in Chinese**. It converts traditional Chinese text into simplified Chinese if necessary. lower/upper and Punct chars will be ignored. 繁简混合的情况下 a 繁、b 简 比较快。 For example:
ChineseStringEqual("自然語言處理", "自然语言处理") == true
See Also: cc_benchmark_test.go
func ComplementTracksImage ¶
func ComplementTracksImage()
ComplementTracksImage is an instance of UpdateTracks to complement Tracks' ImageUrl fields.
func CrawlPlaylistsAndTracks ¶
CrawlPlaylistsAndTracks 从 seed 开始,获取 maxNum 个包含这个单词的播放列表。
计算这些列表中所有单词出现的频次。 然后对列表中出现次数最多的单词执行相同的操作。 重复,知道获取到足够的列表。
func FetchTracks ¶
FetchTracks 获取给定的 playlist 中的曲目
返回一个出 spotify.SimpleTrack 的 chan (带缓冲: size = TracksPageLimit),结果这个 chan 传
func FindPlaylist ¶
func FindPlaylist(client *spotify.Client, w string) <-chan spotify.SimplePlaylist
FindPlaylist 获取匹配搜索项 w 的所有播放列表
返回一个出 spotify.SimplePlaylist 的 chan (带缓冲: size = PlaylistPageLimit),结果这个 chan 传
func InitSeenPlaylists ¶
func InitSeenPlaylists()
InitSeenPlaylists 初始化已见播放列表. After InitConfig & InitDB
func NewSpotifyClient ¶
func RemovePunct ¶
func SeenPlaylist ¶
func SeenWord ¶
SeenWord 返回 false 若没见过 w,同时把 w 标记为见过
Example:
w := "notSeen" SeenWord(w) // false SeenWord(w) // true
func UpdateTracks ¶
func UpdateTracks(where string)
UpdateTracks 请求 spotify,更新数据库中所有 Track 的数据。 where 是数据库取 Track 的 where 查询条件。
也可用于在数据库新增字段后,补充之前的记录。
Types ¶
type AudioFeatures ¶
type AudioFeatures = spotify.AudioFeatures
func GetAudioFeatures ¶
func GetAudioFeatures(client *spotify.Client, trackIds ...string) ([]*AudioFeatures, error)
type AuthResp ¶
type AuthResp struct { AccessToken string `json:"access_token"` TokenType string `json:"token_type"` ExpiresIn int `json:"expires_in"` }
AuthResp is the response of Auth
type Playlist ¶
type Playlist struct { Collaborative bool `json:"collaborative"` Endpoint string `json:"href"` ID string `json:"id" gorm:"primaryKey"` Name string `json:"name"` IsPublic bool `json:"public"` SnapshotID string `json:"snapshot_id"` URI string `json:"uri"` Tracks []Track `json:"my_tracks" gorm:"many2many:playlist_tracks"` }
Playlist 是 spotify.SimplePlaylist 删掉不要的字段
func PlaylistFromSpotify ¶
func PlaylistFromSpotify(sp spotify.SimplePlaylist, sts []spotify.FullTrack) *Playlist
type Track ¶
type Track struct { Artist []Artist `json:"artists" gorm:"many2many:track_artists"` DiscNumber int `json:"disc_number"` Duration int `json:"duration_ms"` Explicit bool `json:"explicit"` Endpoint string `json:"href"` ID string `json:"id" gorm:"primaryKey"` Name string `json:"name"` PreviewURL string `json:"preview_url"` TrackNumber int `json:"track_number"` URI string `json:"uri"` Type string `json:"type"` ImageUrl string `json:"image_url"` }
func SearchTrack ¶
func SearchTrack(client *spotify.Client, query *TrackQuery) (*Track, error)
type TrackQuery ¶
func (TrackQuery) String ¶
func (q TrackQuery) String() string