استفاده از omdb api برای به دست آوردن اطلاعات فیلم و سریال به صورت خودکار

mhazami

تازه وارد
سلام دوستان ، عیدتون مبارک :69:

معمولا سایت هایی که با فیلم و سریال سر و کار دارن همیشه میخوان اطلاعات فیلم یا سریال رو ضمیمه مطلبشون کنن

اطلاعاتی از قبیل نام نویسنده ، بازیگران ، کارگردان ، رتبه imdb ، رتبه منتقدین و ....

خب راه معمولیش اینه که از طریق زمینه دلخواه این اطلاعات رو دستی وارد کنید. که با استفاده از افزونه ACF خیلی کار راحتی ئه

اما امروز میخوام بهتون ترفندی رو اموزش بدم که اطلاعات به صورت خودکار دریافت میشه ، جالب اینجاست نیازی به هیچ افزونه ای نیست و فقط با function.php کار میکنیم.

خب طبق معمول هر آموزش اول از فایل function.php تون یه نسخه کپی بگیرید که اگه اتفاقی پیش اومد بتونید نسخه کپی رو جایگزین کنید.

بعد به سایت مراجعه کنید (استفاده از این api بسیار سادس و مهم تراز همه هیلتر نیست) قبلا میشد از خود سایت IMDB استفاده کرد اما مدتیه که برای گرفتن API باید حتما ثابت کنید که یک شهروند آمریکایی هستید و یه فرم طویل رو امضا کنید.

سایت های دیگه ای هم هستن مثل TMDB که اطلاعات غنی تری رو به شما میدن اما خب اینجور سایت ها هم قوانین خاص خودشون رو دارن و باید ازشون کلید API بگیرید و ... تنظیماتشم کمی سخته.

حالا برای آشنایی بیشتر با OMDB روی لینک زیر کلیک کنید.



طبق گفته های خود سایت این آدرس فیلم true grit که مال سال 1969 هست رو پیدا میکنه و اطلاعات اون رو برمیگردونه

قالب پیشفرض خروجی JSON هست که درک و فهمش ممکنه کمی دشوار باشه برای همین من پیشنهاد میکنم از قالب خروجی XML استفاده کنید که این آمورش هم بر اساس همین قالبه.

آشنایی با پارامتر ها

پارامتر S از نوع رشته درنظر گرفته شده و کار جستوجو (search) رو انجام میده

به خاطر داشته باشید که این پارامتر موارد مشابه رو بهتون نشون میده و اطلاعات کلی فیلم رو به شما نمیده.

پارامتر I این پارامتر هم از نوع رشته اس ، و اساس کاریش ID یا شناسه مطلب در سایت IMDB ئه

در این مثال tt0460649/?ref_=nv_sr_1 قسمت قرمز رنگ شناسه IMDB ئه

پیشنهاد من اینه برای دسترسی دقیق تر به اطلاعات یک سریال از شناسه imdb استفاده کنید.

پارامتر T این پارامتر مثل دو پارامتر بالا از نوع رشته اس و فقط اطلاعات یک فیلم رو برمیگردونه یعنی اگه شما اسم مشابه ای رو به کار ببرید در خروجی با پیغام Movie not found! مواجه میشید پس در مقدار دهی به این پارامتر باید حتما نام دقیق فیلم رو وارد کنید بدون حتی یک فاصله اضافه یا کم.

پارامتر Y هم که از اسمش پیداست بیانگر سال ئه و مکمل پارامتر T ئه یعنی برای دسترسی دقیق به اطلاعات یک فیلم حتما باید سال اون رو به صورت جداگانه در این پارامتر بریزید.

پارامتر R هم به معنای resault ئه و قالب خروجی رو تعیین میکنه (مقدار پیشفرض json)

پارامتر plot هم میگه که خلاصه داستان رو نمایش بدم یا کل داستان :D

استفاده از API در PHP

خب ما به دو زمینه دلخواه نیاز داریم. یکی برای وارد کردن نام فیلم و دومی برای وارد کردن سال تولید.

ساخت این زمینه دلخواه به عهده خود شماست چون کار چندان سختی نیست میتونید از افزونه AFC کمک بگیرید (من در این آموزش همین کار رو کردم)

اول از همه یک function تعریف میکنیم .


کد:
function OMDB($action) {}
بعد میرسیم به دستورات داخل تابع(function)


کد:
$ptitle=get_field( "postname" ); 
$ptitle =str_replace(" ", '%20',$ptitle);
$pyear=get_field( "year" );
توضیحات: خط اول که مال افزونه ACF ئه و مقدار زمینه دلخواه postname رو داخل متغیر pname میریزه

خط دوم که خیلی مهمه یه جورایی اگه نباشه در گرفتن اطلاعات دچار مشکل میشید این خط میگه مقدار pname هرچی که بود با استفاده از تابع str_replace بگرد توش اگه فاصله (فضای خالی یا همون space) بود به جاش %20 رو قرار بده (%20 منظور باقیمانده تقسیم 20 نیست) معادل فضای خالی در آدرس های اینترنتی %20 ئه و اگه این کار رو انجام ندید در آدرس اینترنتی فضای خالی حساب نمیشه و چون از پارامتر T استفاده کردیم دیگه اطلاعات رو برنمیگردونه.

خط سوم هم که اطلاعات زمینه سال رو در متغیر year میریزه.

پر کردن پارامتر های omdb و گرفتن خروجی


کد:
$url=file_get_contents("http://www.omdbapi.com/?t=".$ptitle."&y=".$pyear."&r=XML");
$xml=simplexml_load_string($url);
$attr = $xml->movie[0]->attributes();
return $attr[$action];
توضیحات: خط اول محتویات آدرس رو در متغیر url میریزه با استفاده از تابع file_get_contents

خط دوم محتویات رو لود میکنه (درواقع این تابع کارش اینه که دستورات xml رو شناسایی کنه)

خب با توجه به نوع دست خروجی xml ما نیاز داریم به تابعی که خصوصیات تگ movie رو برگردونه

api های دیگه ممکنه هر مقدار رو در یک تگ بریزن ولی این api یک تگ داره و همه اطلاعات رو در قالب خصوصیات اون تگ نمایش میده.

و خط اخر هم که برای قرار دادن مقدار عملیات در تابع به کار میره (اینم بگم تابه attributes از نوع آرایه اس)

نحوه استفاده از تابع



آدرس بالا رو باز کنید.


کد:
omdb('نام خصوصیت');
به عنوان مثال اگه بخوایم نام کارگردان رو از فایل xml استخراج کنیم این دستور رو می نویسیم


کد:
omdb('director');
توجه داشته باشید که نام خصوصیت تگ movie رو باید بنویسید.

به همین سادگی ! تموم شد ;) حالا تابع رو هرجایی که خواستید با پارامتر دلخواهتون صدا بزنید که اطلاعات مورد نظر رو برگردونه.

پروژه ای هم که این کار رو روش انجام دادم ئه

کد کامل آموزش


کد:
function omdb($action){
$ptitle=get_field( "postname" ); 
$ptitle =str_replace(" ", '%20',$ptitle);
$pyear=get_field( "year" );
$url=file_get_contents("http://www.omdbapi.com/?t=".$ptitle."&y=".$pyear."&r=XML");
$xml=simplexml_load_string($url);
$attr = $xml->movie[0]->attributes();
return $attr[$action];}

 
آخرین ویرایش توسط مدیر:

amin704

کاربر عضو
این روش هنوز کار میکنه؟

 
آخرین ویرایش توسط مدیر:

IAMIR

کاربر عضو
بله omdb هووز فعال است و api ارائه می دهد.

 

cata

تازه وارد
من اینکارو انجام دادم منتها چنتا مشکل دارم

یکی اینکه فیلم هارو قصد دارم بر اساس id فراخوانی مکنم و از پارامتر i استفاده کردم اما نمیدونم کد دقیقا به چه شکل باید تغییر کنن

اسم زمینه دلخواه رو title گذاشتم ، در این قسمت به جای

$ptitle=get_field( "postname" );  postname باید title رو جای گزین کنم؟

سوال اخر اینکه الان اون کدهارو در قانکشن بزارم و زمینه دلخواه رو د با استفاده از تابع خودش در single فعال کنم دیگه نیازی به کار دیگه ای نیست؟

 

pouya42270

تازه وارد
سلام و خسته نباشید

همین کار رو میشه برای یک سایت دیگه کرد ؟

مثلا بجای omdb از یه سایت دلخواه اطلاعات روبگیرم ؟ 

 

mehdi0121

تازه وارد
برای شما دوستان عزیز

وب سرویس دانلود فیلم با کد 🔧imdb
این وب سرویس متصل به سایت mydibaهست و شما فقط با وارد کردن کد imdb فیلم
لینک دانلود ,پوستر فیلم و.... رو نمایش میده به صورت 📁json
🔰توجه فقط فیلم های موجود در mydiba به نمایش در میاد ممکن است که بعضی از فیلم ها در سایت mydiba نباشن 🔰
این وب سرویس فقط برای دانلود فیلم میباشد🏅
مثال
f=کد IMDB فیلم
COD


مثال در عکس زیر
 
بالا