Gracenote est un service de métadonnées d'informations musicales. Vous pouvez obtenir des données musicales à partir du nom de l'artiste, du nom de l'album et du nom de la chanson. En plus des informations musicales, vous pouvez également obtenir des informations sur l'humeur et le tempo. J'ai résumé les résultats de l'examen de la bibliothèque pour Ruby / Python afin d'utiliser l'API Web de Gracenote.
De là (https://developer.gracenote.com/?language=en), vous pouvez vous inscrire au programme développeur. S'il s'agit du japonais, l'anglais est recommandé car une erreur de langue peut apparaître sur l'écran de gestion une fois l'authentification Facebook terminée. Lorsque vous entrez dans l'écran de gestion, sélectionnez le bouton MyApps, sélectionnez «Ajouter une nouvelle application», puis «Créer une application» pour émettre un ID client.
My Apps
Add App
App Details
WebAPI utilise «Client ID for Web API, Rhythm API et eyeQ» et «Client Tag».
Ruby gracenote https://github.com/nobelium/gracenote
Bougez pour le moment
$ gem install gracenote
$ vi sample.rb
sample.rb
require 'rubygems'
require 'gracenote'
obj = Gracenote.new(
clientID: '',
clientTag: ''
)
obj.registerUser
artist_name = 'Perfume'
album_title = 'GAME'
track_title = 'discothèque au chocolat'
match_mode = '0'
p obj.findTrack(artist_name, album_title, track_title, match_mode)
$ ruby ./sample.rb
--Je ne peux pas rechercher par gnid --NET :: HTTP est utilisé, donc c'est une communication synchrone.
Eh bien, je me demande s'il ne s'agit que d'une recherche textuelle d'albums, d'artistes et de titres de chansons
under_fire https://github.com/jasonthompson/under_fire/
Cela ne fonctionne pas tel quel, donc il ne peut pas être utilisé Je l'ai réécrit pour qu'il fonctionne, mais il vaut mieux le faire à partir de zéro.
Étant donné que clientTag est également inclus dans CLIENT_ID, cela peut ne pas être nécessaire en fonction de la création de la bibliothèque.
$ gem install under_fire
$ vi sample.rb
sample.rb
require 'rubygems'
require 'under_fire'
ENV["GRACENOTE_CLIENT_ID"] = 'your client id'
module UnderFire
class BaseQuery
def build_base_query(&block)
builder = Builder::XmlMarkup.new
builder.QUERIES {
builder.AUTH {
builder.CLIENT ENV["GRACENOTE_CLIENT_ID"]
builder.USER ENV["GRACENOTE_USER"]
}
yield builder
}
end
end
end
module UnderFire
class APIRequest
def self.post(query, api_url)
uri = URI(api_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri)
req.body = query
req['Content-Type'] = 'application/xml'
res = http.request(req)
res
end
end
end
client = UnderFire::Client.new
response = client.register(ENV["GRACENOTE_CLIENT_ID"])
ENV["GRACENOTE_USER"] = response.response[:responses][:response][:user]
p client.find_album(:track_title => 'discothèque au chocolat')
$ ruby ./sample.rb
--J'obtiens une erreur de communication SSL
--TrackAPI n'est pas implémenté, vous ne pouvez donc pas obtenir le tempo ou l'ambiance. --NET :: HTTP est utilisé, donc c'est une communication synchrone.
--Comparé à gracenote gem, l'interface peut être recherchée à partir de gn_id de type Ruby
Python
pygn
Pour l'utiliser, copiez simplement pygn.py et placez-le dans votre répertoire de travail. En l'état, il ne peut pas être lu même s'il est installé avec pip Il est facile à utiliser car toutes les fonctions sont implémentées. Le code source étant un fichier, la lecture du code est rapide.
$ wget https://raw.githubusercontent.com/cweichen/pygn/master/pygn.py
$ vi sample.py
sample.py
import pygn
clientID = '' # Enter your Client ID here
userID = pygn.register(clientID)
metadata = pygn.search(clientID=clientID, userID=userID, artist='Perfume')
print metadata
$ python ./sample.py
Il n'y a pas de bibliothèque client officielle Ruby / Python, vous devez donc utiliser un tiers. Celui pour Python fonctionne assez bien, donc si vous voulez l'utiliser rapidement, je recommande pygn. Les performances ne sont pas bonnes lorsqu'elles sont utilisées correctement, je voudrais donc changer l'environnement de communication en une bibliothèque asynchrone et la réimplémenter dans Ruby, ou l'écrire dans Go ou Elixer pour étude.