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

7 ارسال در این موضوع قرار دارد

سلام دوستان ، عیدتون مبارک: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];}

ویرایش شده در توسط mhazami

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

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

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

 

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

$ptitle=get_field( "postname" ); 

 postname باید title رو جای گزین کنم؟

 

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

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 6 ساعت قبل، pouya42270 گفته است :

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

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

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

باید وبسرویس و API ارائه بدن.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
1 1