見つかった唯一の解決策は、 Rhythmboxのパッチの形式でした。 当時、私はGNOMEでプレイヤーを探していましたが、これは最終的にプレイヤーの選択に影響を与えました。
しかし、時が来て、最近私はmpdに移行することに決め、問題が再び発生しました。 もちろん、mpdのscrobbling用のプラグインもありますが、これらの実装には常に欠けているものがあります。LoveTrackボタン。お気に入りの曲にマークを付けることができます。 Linuxのイデオロギーによれば、プログラムをチェーンで結合することは非常に正しいです。
Last.FM Webサイトでは、プレーヤーとクライアント間のプロトコルはどこにも記述されていないため、Rhythmboxの同じパッチのソースコードを調べ、Google Code Searchを使用する必要がありました。
そして、すべてうまくいきました。
プロトコル
プレーヤーとクライアント間の交換プロトコルは非常に簡単です。 クライアントはプレーヤーからの視線を期待します
コマンドパラメーター=値&パラメーター=値&...
&文字はそれ自体でエスケープされます: && 。 コマンドを受信した後、クライアントは接続を閉じ、新しい接続と新しいコマンドを待ちます。
チームは次のように現れました。
パラメータで開始
- c-クライアントID
- a-パフォーマー
- t-タイトル
- b =アルバム
- m-MusicBrains ID
- l-期間
- p-ファイルパス
このコマンドは、新しいトラックの再生を開始していることをクライアントに伝えます。 このコマンドを受信した後、クライアントはカウントダウンを開始します。 進捗状況を彼に通知する必要はありません。
PAUSE 、 RESUME 、 STOP-すべて単一のパラメーターcを使用 (上記を参照)
それらの目的は明らかであり、プレーヤー自体のコマンドに対応しています。
実装
さらに問題はありません:定期的にmpdをポーリングします(mpdと通信するには、標準(リポジトリから) python-mpdを使用します)。また、状態が変更された場合は、適切なLast.FMコマンドをクライアントに送信します。 また、コードはログを実装し、クライアントが自動実行され、突然落ちた場合にmpdに再接続します。 すべてが通常の悪魔を留めるために手に届くわけではありません。
設定は、/ etc / mpdlastfm.confまたは〜/ .mpdlastfm.confから次の形式でダウンロードされます。
mpd_host = localhost # , mpd
mpd_port = 6600 #
mpd_root = /media/sys-work/music # .
log_file = /tmp/mpdlfm.log #
mpd_pass = secrepass #
デフォルト値(コードを参照)は省略可能
コードはコメント化されているため、ここでは説明しませんが、paste.binで理解することができます 。
私は今、1か月間回転していますが、主なバグは修正されています。