الاستعلام عن واجهة برمجة تطبيقات بحث MusicBrainz عبر برنامج PHP النصي

StackOverflow https://stackoverflow.com//questions/24045166

  •  21-12-2019
  •  | 
  •  

سؤال

أحاول استرداد معلومات الإصدار من قاعدة بيانات MusicBrainz باستخدام برنامج PHP النصي الموجود على الخادم الخاص بي.لدي قائمة بالأغاني، مع عنوان الأغنية واسم الفنان، وأحاول استرداد تاريخ الإصدار الأول لتلك الأغنية، بالإضافة إلى معلومات أخرى حول هذا الإصدار.

أدرك أن البحث لن يكون دائمًا دقيقًا بنسبة 100%، ولكن القائمة تتكون من أغانٍ نادرة وفريدة إلى حد ما، لذا يجب أن تضعني على مسار جيد على الأقل.

لقد قطعت شوطًا طويلاً في استخدام البرنامج النصي الخاص بي، فهو يعرض النتائج وكل شيء، لكنني غير متأكد من كيفية كتابة الاستعلام بالضبط.الوثائق مربكة للغاية ولا تحتوي على مثال حيث تبحث عن عنوان الأغنية والفنان.

هذا هو الكود الخاص بي:

// this info is normally fetched from my DB, but just as a simple example (as it is returned):
$artist = "ZZTop"; 
$song_title = "It's only Love";

// I'm having trouble with this part:
$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query=' . $song_title .' ANDartist:' . $artist ;

$xml = simplexml_load_file($mb_query);

$releasedate = $xml->{'recording-list'}->recording[0]->{'release-list'}->release[0]->date;

في البداية حاولت أن rawurlencode() ال $artist و $song_title, ، ولكن من المضحك أن ذلك لم يُرجع أي نتائج، لذلك قررت أن أتركها كسلسلة عادية.يعرض الاستعلام النتائج، لكنها متوقفة حقًا ولدي شعور بأنه تم التقاط جزء فقط من الاستعلام (على سبيل المثال عنوان الأغنية فقط وليس الفنان).

هل يعرف أحد الطريقة الصحيحة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

الاستعلام الذي تم إنشاؤه بواسطة رمز المثال الخاص بك هو هذا:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDartist:ZZTop

المشاكل هي:

  • ANDartist: يجب ان يكون AND artist:
  • ZZTop يجب ان يكون "ZZ Top", وإلا فلن يتم العثور على الفنان.يمكنك إضافة اسم مستعار `ZZTop إذا كنت تعتقد حقًا أن هذا هو عدد الأشخاص الذين يكتبونه
  • قد ترغب في استخدام العبارات ("...") للبحث عن العناوين الكاملة.وإلا فإن MB يبحث عن العناوين بما في ذلك (It's أو only أو Love) و `الفنان: "ZZ TOP".ومع ذلك، فإن النتائج تحتوي على كافة الكلمات سوف الحصول على تصنيف أعلى وتظهر على القمة.لذلك هذا اختياري.

لذا فإن الاستعلام الصحيح/الدقيق الذي سيتم استخدامه سيكون:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20artist:%22ZZ%20Top%22 (2 النتائج)

الاستعلام الأكثر غموضًا الذي يعمل هو:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 نتيجة، باستخدام artist:(ZZ Top) للبحث عن ZZ أو Top الفنانين)

انظر وثائق بحث MusicBrainz و بناء جملة بحث لوسين للتفاصيل.

يعمل هذا الرمز بالنسبة لي (على PHP 5.5.13) بدلاً من السطر الخاص بك:

$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query="'.$song_title.'"'
            .' AND artist:"'.$artist.'"';

ال وثائق PHP أقول أنك بحاجة فقط للاستخدام rawurlencode() قبل PHP 5.1.0.

بالإضافة إلى ذلك، قد ترغب في استخدام مكتبة معدة مسبقًا للعمل مع خدمة الويب MusicBrainz بسهولة أكبر.هناك مكتبة PHP لـ WS/2 المدرجة على وثائق ميغابايت.لم أحاول ذلك بنفسي بالرغم من ذلك.


علاوة:

إذا كانت لديك مشاكل في العثور على التسجيلات بسبب كتابة الفنان بشكل مختلف من جانبك، فيمكنك البحث عن الفنان (بما في ذلك الأسماء المستعارة) أولاً ثم استخدام معرف الفنان للبحث عن التسجيل.لاحظ أنه لا يمكنك استخدام الاسم المستعار في البحث عن التسجيل مباشرةً.

سيتم البحث عن هذا الاستعلام ZZTop في أسماء الفنانين والأسماء المستعارة للفنانين واسم نوع الفنان:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22(انظر التوثيق الميداني للبحث عن الفنان).

مع هذا البحث تحصل على معرف فريد: a81259a0-a2f5-464b-866e-71220f2739f1.لاحظ أنك قد تحصل على نتائج متعددة، لذا قد ترغب في حفظ قائمة تحتوي على نتائج ذات درجة عالية وتجربة إدخالات أخرى عندما لا تتمكن من العثور على التسجيل في الخطوة التالية.

يمكنك الآن استخدام المعرف بدلاً من الاسم في البحث عن التسجيل:http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1

تستطيع ايضا استخذام arid:(... OR ...) عندما تحصل على نتائج متعددة للاستعلام الخاص بالفنان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top