Изменение существующего кода для получения результатов поиска из API

В настоящее время я работаю над небольшим хобби-проектом и столкнулся с некоторыми проблемами, которые не могу решить. Прежде всего, я хотел бы отметить, что мой опыт программирования ограничен некоторой вычислительной физикой и, следовательно, довольно далек от моей текущей проблемы.

Проще говоря, я хотел бы провести некоторый анализ данных с данными, запрошенными из API. Я имею в виду API-интерфейс это (документация связана прямо здесь (больше не могу публиковать ссылки)). Есть также довольно приятное дополнение для работы с этим предоставленным здесь. Мне удалось написать базовую программу для получения данных для данного id и выполнить некоторые простые вычисления. Поскольку искать id каждого заголовка довольно неудобно, автор 3 предоставил возможность поиска. Итак, я могу искать запись по name, season и некоторым другим key, определенным в здесь.

Это, безусловно, удобно, но я не понимаю, как я могу эффективно использовать это в, возможно, немного более сложном контексте. Допустим, я делаю следующее, как это предлагается в файле Read me3.

from Pymoe import Anilist
instance = Anilist()
instance.search.anime("King")

Совершенно очевидно, что это приведет к поиску слова «Король» в названии, но если я хочу найти записи с наибольшей популярностью, это также является ключом в определении search (как можно увидеть в строке 87 4 ), как бы я это сделал?

Другая проблема, с которой я сейчас сталкиваюсь, которая частично связана с вышеизложенным, - это цель модификации search. Я сделал это для get (добавил еще один ключ, и он отлично работает), но я борюсь с этим для search. Допустим, я хочу добавить ключ seasonYear (который можно найти здесь в строке 19). Моя попытка состояла в том, чтобы изменить строки 69-94 в 3 на

    query ($query: String, $page: Int, $perpage: Int) {
        Page (page: $page, perPage: $perpage) {
            pageInfo {
                total
                currentPage
                lastPage
                hasNextPage
            }
            media (search: $query, type: ANIME) {
                id
                title {
                    romaji
                    english
                }
                coverImage {
                    large
                }
                averageScore
                popularity
                episodes
                season
                seasonYear
                hashtag
                isAdult
            }
        }
    }

Я просто добавил строчку с seasonYear. Когда я пытаюсь запустить это, я получаю сообщение об ошибке

{'data': None, 'errors': [{'message': 'Cannot query field "seasonYear" on type "Media".', 'status': 400, 'locations': [{'line': 22, 'column': 25}]}]}

но согласно документации это действующий ключ для типа media.


TL; DR: Как мне искать что-то более сложное, чем имя, например популярность и т. д. Как я могу отредактировать код, чтобы иметь возможность позже искать что-то вроде ключа seasonYear.


Обновлено: Проведя еще несколько исследований и просмотрев некоторые другие примеры в Интернете, я смог решить свою первую проблему, которая заключалась в написании функции, которая возвращает все входы с определенным popularity. Код, с которым я придумал это сделать,

        query ($query: Int) {
            Page {
                media(isAdult: false, popularity_greater: $query, type: ANIME) {
                    id
                    title {
                        english
                    }
                    episodes
                    startDate {
                        day
                        month
                        year
                    }
                    endDate {
                        day
                        month
                        year
                    }
                    genres
                    popularity
                }
            }
        }

Так что единственное, что осталось, - это мой второй вопрос о ключе seasonYear.

Я читаю этот anilist.github.io/ApiV2-GraphQL-Docs/media.doc.html, но не вижу поля seasonYear. Я вижу season

Dora 18.12.2018 01:58

@Dora, но когда я смотрю на определение Pageздесь, там есть ключ для seasonYear ... Я немного запутался, не могли бы вы немного прояснить это.

Marius Jaeger 18.12.2018 10:46

Вы передаете аргументы как season, так и seasonYear? По "# seasonYear: год сезона (зима 2017 также будет # включать выпуск за декабрь 2016 г.). Требуется аргумент сезона"(строка 16 документации по запросу)

Reid Ballard 19.12.2018 18:21

@ReidBallard Я думаю, что да (в моем примере выше он включен), но я, очевидно, не уверен, правильно ли я делаю это ...

Sito 20.12.2018 15:23

Хорошо, понятно: я предположил, что вы были searching по сезону. Год: вы просто извлекали его правильно? Посмотрев еще раз на документы, в разделе Страница здесь вы увидите, что media (обратите внимание на строчные буквы) ссылается на эти документы здесь: этот возврат media отличается от объекта возврата запроса Media (заглавными буквами). Этот узел media не имеет значения seasonYear, как и написано в ошибке. Судя по всему, вы, вероятно, захотите либо startDate, либо endDate и проанализируете год оттуда.

Reid Ballard 20.12.2018 15:34

@ReidBallard Спасибо за комментарий, который действительно решил мою проблему!

Sito 20.12.2018 22:15

Рад слышать! Я скопирую решение, чтобы его было легче найти и на вопрос можно было отметить ответ.

Reid Ballard 21.12.2018 20:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
209
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Под Страница в документации вы увидите, что media (обратите внимание на нижний регистр) ссылается на эти документы здесь: этот возврат media отличается от объекта возврата запроса Media (заглавными буквами). Этот media node не имеет значения seasonYear, как и написано в ошибке. Судя по всему, вы, вероятно, захотите либо startDate, либо endDate и проанализируете год оттуда.

Другие вопросы по теме