انشاء سكريبت من أجل البحث عن فيلم أو مسلسل باستخدام TMDB API
يوفر TMDb API واجهة برمجة تطبيقات مجانية تُتيح لك الوصول إلى بيانات حول الأفلام، المسلسلات، الممثلين، وغيرهم.
و اليوم و في هذا الموضوع، سنوضح لك كيفية الحصول على مفتاح API من TMDb واستخدامه في تطبيقاتك لعرض بيانات الأفلام والمسلسلات
بحث عن فيلم أو مسلسل
1. كيفية الحصول على مفتاح API من TMDb
لتتمكن من استخدام API لـ TMDb، عليك أولاً إنشاء حساب على الموقع والحصول على مفتاح API. إليك الخطوات:- انتقل إلى موقع TMDb الرسمي.
- قم بالتسجيل على الموقع وإنشاء حساب إذا لم يكن لديك واحد.
- بعد التسجيل، انتقل إلى إعدادات API في حسابك.
- قم بإنشاء مفتاح API جديد عن طريق ملء النموذج المطلوب، ثم انسخ المفتاح لاستخدامه في تطبيقك.
2. كيفية استخدام TMDb API في تطبيقك
الخطوة التالية هي كتابة الكود الذي يقوم بإرسال طلب إلى API للحصول على بيانات الأفلام أو المسلسلات. إليك مثال على كيفية القيام بذلك:const apiKey = 'YOUR_API_KEY'; // استبدل هذا بمفتاح API الخاص بك
const movieName = 'اسم الفيلم أو المسلسل';
const searchUrlMovie =
https://api.themoviedb.org/3/search/movie?api_key=${apiKey}&query=${movieName}
;const searchUrlTV =
https://api.themoviedb.org/3/search/tv?api_key=${apiKey}&query=${movieName}
;3. شرح الكود
في الكود أعلاه، قمنا بتحديد متغير apiKey الذي يحتوي على مفتاح API الخاص بك، ومن ثم أنشأنا رابطين لاستعلامين:- searchUrlMovie: لاستعلام البحث عن الأفلام باستخدام اسم الفيلم.
- searchUrlTV: لاستعلام البحث عن المسلسلات باستخدام اسم المسلسل.
4. كيفية عرض النتائج على صفحة الويب
بمجرد الحصول على البيانات من TMDb API، يمكنك عرض الأفلام أو المسلسلات في الصفحة باستخدام DOM (Document Object Model). إليك مثال آخر على كيفية عرض نتائج البحث:const movieResponse = await fetch(searchUrlMovie);
const movieData = await movieResponse.json();
const tvResponse = await fetch(searchUrlTV);
const tvData = await tvResponse.json();
const resultsContainer = document.getElementById('results-container');
resultsContainer.innerHTML = ''; // تفريغ النتائج السابقة
if (movieData.results && movieData.results.length > 0) { ... }
if (tvData.results && tvData.results.length > 0) { ... }
5. المزيد من الموارد
للتعرف على المزيد من التفاصيل حول كيفية استخدام TMDb API، يمكنك زيارة الدليل الرسمي لـ TMDb API.كما يمكنك تعلم المزيد عن البرمجة مع APIs عبر دورة تعليمية مجانية على Codecademy.
6. نصائح
- تأكد من استخدام مفتاح API الخاص بك بشكل آمن ولا تشاركه علنًا.
- قم بإعداد معالجة الأخطاء مثل فشل الاتصال أو وجود خطأ في المفتاح.
- تجنب إرسال عدد كبير من الطلبات في وقت واحد لتجنب الحظر من خدمة TMDb.
خاتمة
إن استخدام TMDb API في تطبيقاتك يسمح لك بالحصول على بيانات مفصلة ودقيقة عن الأفلام والمسلسلات. يمكن تخصيص الكود الذي شرحناه أعلاه ليناسب احتياجاتك الخاصة، سواء كنت تطور تطبيق ويب أو موبايل.بحيث يمكنك الاستفادة من API في العديد من المشاريع الرائعة التي تعتمد على المحتوى السينمائي والتلفزيوني.
Code Html
كود:
<style>
.conntainer {
width: 90%;
margin: 0 auto;
padding-top: 50px;
}
h1 {
text-align: center!important;
color: green;
}
.search-box {
display: block;
justify-content: center;
align-items:center;
margin-bottom: 20px;
}
.search-input {
padding: 10px;
width: 100%;
max-width: auto;
font-size: 16px;
border: 1px solid gray;
border-radius: 5px;
margin: 10px auto;
}
.search-button {
padding: 10px 20px;
font-size: 16px;
border: none;
background-color: #007BFF;
color: white;
cursor: pointer;
border-radius: 5px;
margin: 10px auto;
width:90%;
transition: background-color 0.3s;
}
.search-button:hover {
background-color: #0056b3;
}
.results-container {
margin-top: 20px;
height:auto;
max-height:500px;
overflow:scroll;
width:80%;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
.movie-details {
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
margin-top: 20px;
animation: fadeIn 0.5s ease-in-out;
}
.movie-details h2 {
margin-top: 0;
}
.movie-details p {
font-size: 16px;
color: #555;
}
iframe {
margin-top: 20px;
border-radius: 10px;
}
.movie-item {
padding: 15px;
border: 1px solid #ddd;
margin-bottom: 10px;
border-radius: 8px;
background-color: #fff;
display: flex;
align-items: center;
flex-wrap: wrap;
cursor: pointer;
transition: transform 0.3s, background-color 0.3s;
}
.movie-item:hover {
background-color: #f0f0f0;
transform: scale(1.02);
}
.movie-item img {
width: 100px;
height: auto;
margin-right: 15px;
border-radius: 5px;
}
.movie-item div {
flex: 1;
}
.movie-title {
font-size: 18px;
font-weight: bold;
}
.movie-overview {
font-size: 14px;
color: #555;
}
/* Animation */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* استعلامات الوسائط لجعل الصفحة responsive */
@media (max-width:auto) {
.container {
width: auto;
}
.search-input {
width: 100%;
}
.search-button {
width: 100%;
margin-top: 10px;
}
.movie-item {
flex-direction: column;
align-items: flex-start;
}
.movie-item img {
width: 80px;
margin-right: 0;
margin-bottom: 10px;
}
.movie-title {
font-size: 16px;
}
.movie-overview {
font-size: 12px;
}
}
@media (max-width: 480px) {
.search-input {
font-size: 14px;
padding: 8px;
}
.search-button {
font-size: 14px;
padding: 8px;
}
.movie-title {
font-size: 14px;
}
.movie-overview {
font-size: 12px;
}
}
</style>
<div class="container" dir="rtl" style="text-align:right;">
<h1>بحث عن فيلم أو مسلسل</h1>
<!-- مربع البحث -->
<div class="search-box">
<input type="text" id="movie-name" class="search-input" placeholder="أدخل اسم الفيلم أو المسلسل">
<button class="search-button" onclick="searchMovie()">بحث</button>
</div>
<!-- عرض النتائج هنا -->
<div id="results-container" class="results-container"></div>
</div>
<script>
async function searchMovie() {
const apiKey = 'YOUR API '; // استبدل بمفتاح API الخاص بك
const movieName = document.getElementById('movie-name').value;
const searchUrlMovie = `https://api.themoviedb.org/3/search/movie?api_key=${apiKey}&query=${movieName}`;
const searchUrlTV = `https://api.themoviedb.org/3/search/tv?api_key=${apiKey}&query=${movieName}`;
// إرسال الطلب للحصول على الأفلام
const movieResponse = await fetch(searchUrlMovie);
const movieData = await movieResponse.json();
// إرسال الطلب للحصول على المسلسلات
const tvResponse = await fetch(searchUrlTV);
const tvData = await tvResponse.json();
const resultsContainer = document.getElementById('results-container');
resultsContainer.innerHTML = ''; // تفريغ النتائج السابقة
let resultsFound = false;
// التعامل مع نتائج الأفلام
if (movieData.results && movieData.results.length > 0) {
resultsFound = true;
movieData.results.forEach(movie => {
resultsContainer.innerHTML += generateMovieItem(movie, 'movie', apiKey);
});
}
// التعامل مع نتائج المسلسلات
if (tvData.results && tvData.results.length > 0) {
resultsFound = true;
tvData.results.forEach(tv => {
resultsContainer.innerHTML += generateMovieItem(tv, 'tv', apiKey);
});
}
if (!resultsFound) {
resultsContainer.innerHTML = '<p>لم يتم العثور على نتائج.</p>';
}
}
function generateMovieItem(item, type, apiKey) {
const title = type === 'movie' ? item.title : item.name;
const overview = item.overview;
const itemId = item.id;
const itemType = type;
const itemPoster = `https://image.tmdb.org/t/p/w500${item.poster_path || ''}`;
return `
<div class="movie-item" onclick="showDetails(${itemId}, '${itemType}', '${apiKey}')">
<img src="${itemPoster}" alt="${title}">
<div>
<div class="movie-title">${title}</div>
<div class="movie-overview">${overview.substring(0, 150)}...</div>
</div>
</div>
`;
}
async function showDetails(itemId, itemType, apiKey) {
const detailsUrl = `https://api.themoviedb.org/3/${itemType}/${itemId}?api_key=${apiKey}`;
const videoUrl = `https://api.themoviedb.org/3/${itemType}/${itemId}/videos?api_key=${apiKey}`;
const detailsResponse = await fetch(detailsUrl);
const detailsData = await detailsResponse.json();
const videoResponse = await fetch(videoUrl);
const videoData = await videoResponse.json();
const trailer = videoData.results.find(video => video.type === 'Trailer' && video.site === 'YouTube');
const trailerEmbed = trailer
? `<iframe width="100%" height="400" src="https://www.youtube.com/embed/${trailer.key}" frameborder="0" allowfullscreen></iframe>`
: '<p>لا يتوفر مقطع دعائي.</p>';
const movieDetails = `
<div class="movie-details">
<h2>${itemType === 'movie' ? detailsData.title : detailsData.name}</h2>
<p><strong>الوصف:</strong> ${detailsData.overview}</p>
${trailerEmbed}
</div>
`;
document.getElementById('results-container').innerHTML = movieDetails;
}
</script>