LINUX.ORG.RU

Получение данных с github по api

 , , ,


0

1

Подскажите ,пожалуйста, как правильно получить информацию из issues по ключам 'number' и 'repository_url'. Толи я запрос по апи не так делаю и мне приходит список ,а не словарь, толи парсю не правильно...

import requests
import datetime
import sys


def get_trending_repositories(top_size):
    date_now = datetime.datetime.now()
    last_week = (date_now - datetime.timedelta(days=7)).strftime('%Y-%m-%d')

    filter_params = {'sort': 'stars',
                     'order': 'desc',
                     'page': '1'}
    filter_params['q'] = 'created:>{}'.format(last_week)
    filter_params['per_page'] = '{}'.format(top_size)
    url = 'https://api.github.com/search/repositories'
    repositories = requests.get(url, params=filter_params).json()['items']
    return repositories


def get_open_issues_amount(repositories):
    for number, repo in enumerate(repositories, 1):
        url = 'https://api.github.com/repos/{}/issues'.format(repo['full_name'])
        issues = requests.get(url).json()

        print('{}) \t open issues:{} \t {}'.format(
                    number, issues['number'], issues['repository_url']))


if __name__ == '__main__':
    if len(sys.argv) > 1:
        input_amount = sys.argv[1]
    else:
        input_amount = input('Enter amount repositories: ')
    filter_repositories = get_trending_repositories(input_amount)
    get_open_issues_amount(filter_repositories)


При попытке вывести на печать выдает ошибку:
Traceback (most recent call last):
  File "github_trending.py", line 49, in <module>
    get_open_issues_amount(filter_repositories)
  File "github_trending.py", line 28, in get_open_issues_amount
    number, issues['number'], issues['repository_url']))
TypeError: list indices must be integers or slices, not str

В issues содержится список, а не словарь. Код не запускал, вангую что-то вроде

for issue in issues:
    print(issue['number'], issue['repository_url'])

Deleted
()
Ответ на: комментарий от Deleted

Пасиб! Ругаться перестал , но теперь все выводит ,а не только итоговое значение.

Enter amount repositories: 2
1) 	 open issues:3 	 https://api.github.com/repos/yunjey/StarGAN
1) 	 open issues:2 	 https://api.github.com/repos/yunjey/StarGAN
2) 	 open issues:6 	 https://api.github.com/repos/SangKa/PWA-Book-CN
2) 	 open issues:5 	 https://api.github.com/repos/SangKa/PWA-Book-CN
2) 	 open issues:4 	 https://api.github.com/repos/SangKa/PWA-Book-CN
2) 	 open issues:2 	 https://api.github.com/repos/SangKa/PWA-Book-CN

PavelShturm
() автор топика
Ответ на: комментарий от PavelShturm

Хотя все логично делает. Там 'number' просто много в каждом issueполучается . Теперь остается только самое большое значение оставить.

PavelShturm
() автор топика
Ответ на: комментарий от PavelShturm

госпади какой кошмарный код и разработчик, получая список ишью для списка репозитариев он даже не может запомнить контекста, интересно, как должна выглядеть структура с объектом из его фантазий?

/api/issues -> {"number": <total-issues-amount:int>, "issue1": {"repo": <repository-url:string>, "description": <issue-description:text>}, "issue2": ...}

так, что-ли?

про дизайн функций я уже вообще молчу, видно человек начинающий

anonymous
()
Ответ на: комментарий от anonymous

Вы абсолютно правы. Я только учусь и пробую разные практические задачки решать. Т.к. подсказать рядом некому, то приходится просить помощи на форумах:( Для месяца изучения питона - тоже кошмар?

PavelShturm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.