Вы знаете название вашего любимого фильма, так как можно было бы в состоянии получить любой официальный плакат фильма, только основанный на названии фильма? Хотя это может быть личный забавный проект для вас и ваших друзей, вы также можете быть в бизнесе, где можно получить изображение на основе связанного имени, может быть полезным – скажем, в маркетинге вы хотите вызвать изображение продукта, просто используя название продукта. С Перестановка Рамки интеграции с открытым исходным кодом , вы можете легко сделать это, настроив конечную точку API, чтобы получить изображение, или, как в нашем примере ниже, плакат фильма.
В этом примере вы увидите, как легко интегрировать несколько услуг с перестановками, поэтому вам не нужно тратить ценное время разработки, настраивая их. Эти интеграции и рабочие процессы созданы внутри приложения перестановки. Объекты, которые позволяют вам взаимодействовать с этими услугами, называются разъемами.
Давайте построим это
Это двухступенчатый процесс. Код сначала использует разъем реестра развлекательного идентификатора Resherffleffleffleffuls (EIDR) для разрешения имени фильма в стандартизированный идентификатор фильма. Затем он использует фильмы В любом месте API, чтобы посмотреть на официальное изображение плаката фильма с данным ID.
См. Ссылки для полной документации:
Давайте начнем при создании приложения перестановка и Три разъема, перечисленные выше.
// Initialize the Reshuffle application and connectors const app = new Reshuffle(); const eidr = new EIDRConnector(app); const http = new HttpConnector(app); const ma = new MoviesAnywhereConnector(app);
Используя метод ON () разъема HTTP, мы будем слушать запрос GET HTTP на пути «/». Внутри перестройки запрос преобразуется в событие.
http.on({ method: "GET", path: "/" }, async ({ req, res }) => { // Get the movie name from the query string const name = req.query.name; if (typeof name !== "string" || name.trim().length === 0) { return res.status(400).send(`Invalid movie name: ${name}`); } const nm = name.trim(); // Get the image width from the query string, or default to 400 const width = req.query.width || 400; const wd = typeof width === "string" ? parseInt(width, 10) : width; if (typeof wd !== "number" || isNaN(wd) || wd <= 1 || 8192 < wd) { return res.status(400).send(`Invalid width: ${wd}`); }
Движение вперед с действительным именем фильма, мы будем использовать разъем EIDR с его SmaseQuery
Способ разрешить прилагаемое имя в ID EIDR.
- Для получения дополнительной информации о объекте, переданном
Производитель
, пожалуйста, посмотрите на Прочти меня
// The following blocks of code will follow directly after the previous, until it reaches the final `});` // Lookup the movie name in EIDR. If the movie is found, we get back a unique ID const movies = await eidr.simpleQuery({ name: nm, movie: true, valid: true, StructuralType: "Performance", }); if (movies.length < 1) { return res.status(404).send(`Movie not found: ${nm}`); } const id = movies[0].ID; // The movies array may contain multiple objects that reference the same movie, but with a different EIDR ID, we take [0] since they will all point to the same title.
Если запрос не находит совпадение с указанным именем фильма, он будет разрешен в пустое массив, здесь есть условный блок, чтобы обрабатывать этот случай.
Когда запрос проходит проверку выше, мы переходим к тому, где мы будем использовать ID EIDR вместе с фильмами в любом месте разъема. Имейте в виду, не все фильмы являются частью фильмов в любом месте сервиса, поэтому некоторые могут быть разрешены в неопределенные.
// Lookup the movie ID in Movies Anywhere. Movies Anywhere's title service // provides metadata for movies, including a URL for the poster image const title = await ma.getTitleByEIDR(id); if (!title) { return res.status(404).send(`Movie not found: ${nm}`); }
Теперь, когда мы нашли фильм с ID EIDR ID, мы создадим URL с помощью объекта, разрешенного и возвращаем изображение в ответ HTTP.
// Fetch the image const url = `https:${title.boxart}.jpg?w=${Math.round(wd)}`; const rs = await fetch(url); if (rs.status !== 200) { return res.status(500).send(`Unable to load poster image: ${nm}`); } // Return the image in the HTTP response const blob = await rs.blob(); return res .set({ "Content-Type": blob.type, "Content-Length": blob.size }) .send(Buffer.from(await blob.arrayBuffer())); //end });
Наконец, нам нужно запустить приложение перестановки.
app.start(8000);
Попробуйте это
Если вы скопировали код из репо Установите пример и запустите сервер перестановки:
npm install reshuffle-movieposter-example npm run start
Это начнет веб-сервер в локальном порте 8000. Затем укажите свой браузер к локальному URL ( http://localhost: 8000/? Name = superman ), чтобы увидеть рамку плаката.
Это должно выглядеть так:
Попробуйте разные имена фильмов, но осознайте, что не все фильмы являются частью фильмов в любом месте сервиса, поэтому некоторые могут не разрешать в изображение плаката.
Поделитесь с нами вашими мыслями
Перестановка постоянно слушает то, что нужно и желание наших разработчиков. Не видите разъем к сервису, который вы хотели бы интегрировать? Отправить Tweet на @Reshffhffffhffhffhffhfhq Чтобы сообщить нам, какой разъем вы хотели бы, чтобы мы разработали дальше.
Оригинал: “https://dev.to/alanblee/how-to-retrieve-a-movie-s-official-poster-with-reshuffle-open-source-2inf”