Skip to content

Instantly share code, notes, and snippets.

@larry27
Last active February 8, 2018 22:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save larry27/5d07c0f53b6cfe177a3a5a50e38fcaaf to your computer and use it in GitHub Desktop.
Save larry27/5d07c0f53b6cfe177a3a5a50e38fcaaf to your computer and use it in GitHub Desktop.
ComicsSite
Нашел новый сайт с апи, можно попробовать замутить еще его. Конечно не скажу, что прям сильно новый функционал, но для закрепления и
отработки навыков подойдет.
APIKEY:d59d3e67045d416f4694de0c0b5914b271721ffa
Пример запроса в формате json
https://comicvine.gamespot.com/api/issues/?api_key=d59d3e67045d416f4694de0c0b5914b271721ffa&format=json
Документацию по api можно читать тут https://comicvine.gamespot.com/api/
Делаем сайтик похожий на https://comicvine.gamespot.com
********************************************************
1. Делаем вывод списка комиксов и его номеров
Каждый комикс содержит номера пример , как выглядит комикс ( страница комикса)
https://comicvine.gamespot.com/single-series/4050-766/
В нем 28 выпусков, сначала предлагаю сделать просто список комиксов их вывод это делается по запросу
https://comicvine.gamespot.com/api/volumes/?api_key=d59d3e67045d416f4694de0c0b5914b271721ffa&format=json
Там есть поля "number_of_page_results": 100, "number_of_total_results": 92412, на основе этого делаешь пагинацию. Там смотри ответ смотри обложку и тд и тп .
Читаешь раздел апи volumes там есть сортировки и тд, ну сначала разберись что тебе отвечает апи.
ЧТобы все работало как и раньше надо будет тебе немного поменять сервер на ноде, что ятебе прислал, там урл поменять там разберешься
********************************************************
06.02.2018
Посмотрел твой код, понял твою ошибку.
1. Тебе надо работать с тем апи который делает запрос на issues там в гист, там где описание я делал пример. Если посмотреть описание апи для работы с issues там есть парамертр volume это id твоих комиксов
Получается тебе надо сделать запрос к issues и передать фильтр по volume. Посмотри описание апи.
2. Тебе надо именно сделать переход. Если ты просто откроешь в номов окне, то ты не сможешь нормально манипулирвать js внутри этого документа, короче это ебала будет, надо сдалать что-то вроде
<a href="comics.html">Подробнее</a>
И помнишь ты смотрел видео по протоколу HTTP там было описание GET и POST параметров. Тебе нужна как-то передать на страницу comics.html идентификатор твоего volume т.е. чтобы ты мог с этой странице сделать запрос и получить весь списко выпусков данного комикса отсюда делает вывод, что ссылка принимает вид
<a href="comics.html?volume_id=123">Подробнее</a>
Можень назвать как тебе удобно это просто параметр.
3. Тебе надо будет как-то со странице получить этот параметр с помощью js. Получается в браузере есть такой обьект location https://developer.mozilla.org/ru/docs/Web/API/Window/location
Можно воспользоваться для начала деревянным спомобом
console.log(window.location.search);
Посмотри что вернет при переходе по ссылке comics.html?volume_id=123
Там уже сможешь с помощью строковых функций получить число, ну и там уже сделаешь запрос к апи.
************************ 09.02.2018 ******************************
По поводу твоего кода файл script_for_about.js
1. Первая строка - Нужно навверное уже задуматься, надо созданием отдельной функции или класса, который будет собирать твою ссылку и делать запрос.Если вдруг изменится апи кей, во скольких местах тебе придется его изменить? А надо, чтобы это было одно место.
Предлагаю сделать класс вида
class API {
constructor(apiKey){
this.apiKey = apiKey;
}
getComics(){
.......
}
getComicsNumbers() {
....
}
}
Ну или еше каким-то образом это все вынести в одно место, чтобы юзать в 2х файлах
2. Параметр гет, если не задан, то все поломается, так не должно быть предлагаю написать функцию аля getComicsId или как-то так и она вернет тебе айди комикса из гет запроса
window.location.search.substring(11) надо по крайней мере вроверить, что есть такой парамертр в гет запросе , а если будет их несколько типа ?page=1&test=2&gff=34 то твой запрос сломается, сам понимаешь почему.
Предалгаю не писать длинные строки с урлом, а создать типа обьект с параметрами аля
let requestData = {
api_key:key,
&format:json,
filter: "volume:2"
}
ПОтом этот обьект куда-то в функцию передавать и собирать из него правильный урл, по обеектам ты уже умеешь итерироваться типа for in или for of и тд
3. Старайся уходить от fetch(request)
.then(function (response) {
return response.json();
})
Можно использовать арроу функции, так тебе потом будет легче
4. pageChanger.onclick тут опять дублирование апи кея, помысли, например если бы у нас была функция вида getComics(pageNumber, limitElementOnPage) как-то так.
В дальнейшем еще надо подумать по поводу создания штмл с помощью шаблонов, типа http://ejs.co/ потом почитаешь . Просто чтобы ты сам не делал итерацию не вставлял кучу кода, а просо передал собранный обьект куда надо.
Может уже сейча прикрутить бабел чтобы использовать import и тогда можно будет разделить код по нормальному.
В целом все ок, надо просто по красивее чутка это все причесать дело
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment