Как программно получить метаданные всех пакетов, доступных в AUR в ArchLinux? - PullRequest
0 голосов
/ 30 мая 2018

Как программно получить метаданные всех пакетов, доступных в AUR в ArchLinux, включая те, которые не установлены локально?Предпочтительно в Python.

Я пробовал AurJson , набор API для доступа к метаданным пакета, но для метаданных пакета запроса должна быть предоставлена ​​минимальная длина ключевых слов для поиска.

1 Ответ

0 голосов
/ 30 мая 2018

Это интересный вопрос!

Пакеты AUR

Вы можете получить список всех пакетов AUR с https://aur.archlinux.org/packages.gz.

Затем вы можете использоватьinfo запрос и пакетная обработка интерфейса AurJson в количестве (не уверенном, каково максимальное количество запросов) пакетов:

https://aur.archlinux.org/rpc.php/rpc/?v=5&type=info&arg[]=criu&arg[]=criu&arg[]=criu&arg[]=criu&arg[]=criu&arg[]=criu&arg[]=criu&arg[]=criu

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

import requests

packages = requests.get('https://aur.archlinux.org/packages.gz').text.splitlines()
batch_size = 50
package_infos = {}

while packages:
    batch, packages = packages[:batch_size], packages[batch_size:]
    for result in requests.get(
        'https://aur.archlinux.org/rpc.php/rpc/',
        params={'v': 5, 'type': 'info', 'arg[]': batch},
    ).json()['results']:
        package_infos[result['Name']] = result
    break  # Replace this with throttling code :)

print(package_infos)

приводит к

{'adwaita-dark-darose': {'Depends': ['gnome-themes-standard'],
                         'Description': 'Adwaita theme hacked to use my custom '
                                        'color scheme. (Dark blues instead of '
                                        'greys.)',
                         'FirstSubmitted': 1493136022,
                         'ID': 464990,
                         'Keywords': [],
                         'LastModified': 1511841278,
                         'License': ['GPL'],
                         'Maintainer': 'darose',
                         'MakeDepends': ['glib2', 'gtk3'],
                         'Name': 'adwaita-dark-darose',
                         'NumVotes': 3,
                         'OutOfDate': None,
                         'PackageBase': 'adwaita-dark-darose',
                         'PackageBaseID': 121780,
                         'Popularity': 0.024409,
                         'URL': 'none',
                         'URLPath': '/cgit/aur.git/snapshot/adwaita-dark-darose.tar.gz',
                         'Version': '3.22.3-10'},
 'atari-adventure': {'Depends': ['stella'],
                     'Description': 'The original Adventure game for the old '
                                    'Atari 2600 game console',
                     'FirstSubmitted': 1247592088,
                     'ID': 214107,
                     'Keywords': [],
                     'LastModified': 1437534447,
                     'License': ['unknown'],
                     'Maintainer': 'darose',
                     'Name': 'atari-adventure',
                     'NumVotes': 2,
                     'OutOfDate': None,
                     'PackageBase': 'atari-adventure',
                     'PackageBaseID': 28288,
                     'Popularity': 0,
                     'URL': 'http://www.atariage.com/software_page.html?SoftwareID=802',
                     'URLPath': '/cgit/aur.git/snapshot/atari-adventure.tar.gz',
                     'Version': '1.0-3'},
....

Пакетам Arch

(я неправильно понял оригинальный вопрос, но вот оригинальный ответ.)

Вы можете просмотреть файлы базы данных Arch, которые, согласно вики Arch Archi, файлы tar.gz , с использованием библиотеки tarfile в Python.

Предполагается, что вы загрузили файл core.db / community.db / extra.db из зеркала (например, https://mirrors.edge.kernel.org/archlinux/core/os/x86_64/core.db / https://mirrors.edge.kernel.org/archlinux/community/os/x86_64/community.db / https://mirrors.edge.kernel.org/archlinux/extra/os/x86_64/extra.db, но используйте другое зеркалоближе к вам), вы можете прочитать их, например (Python 3)

import tarfile
tf = tarfile.open('core.db', 'r:gz')
for member in tf.getmembers():
    if member.name.endswith('/desc'):
        with tf.extractfile(member) as fp:
            print(fp.read().decode())
            print('-' * 40)

, который печатает файлы описания в их собственном формате, например,

%FILENAME%
archlinux-keyring-20180404-1-any.pkg.tar.xz

%NAME%
archlinux-keyring

%VERSION%
20180404-1

%DESC%
Arch Linux PGP keyring

%CSIZE%
684236

%ISIZE%
948224

%MD5SUM%
9ba27bf598d60f2ea6320339289a2401

%SHA256SUM%
6f0f2f8d72742da18b61b7e4a1900d419c718b6d9dcad804763b80a12cc9abaf

%PGPSIG%
iQEzBAABCAAdFiEE82kWh9hnuBtRzgfZu+Q3cUhzKKkFAlrEfLMACgkQu+Q3cUhzKKmE7ggAgNjBAz6FkFqy2+Q0Rfzt0ZibYT/KW6ibQoKgpxDQNkzcl/1ZVzS4rkZRjHkBJd8fKI2n6NtiijwiQBPBsTI8t4+nVD19C4zZbDHzTdABm4EaDdJg+ya635Df8xMqt6GNzxV5DmABioSww2ebY9EuSwl3yvMNTQUI8hAjWPfOirDRZDic9DEYvhPabUn9NlLzShQeDIZP/R0ejDCfBIcu2NMX+NSUg41w0+LGrLNpqdnI+ej0n3X6NDkvCZwvvC3DPCWs1PAhFS5yC5dve4pDBjf8fLuJBPbRQJx6Se0K0CCoeUVA2V4ld2HLXor1aLG0bijF2QhMLzHmW4XxWbpWLA==

%URL%
https://projects.archlinux.org/archlinux-keyring.git/

%LICENSE%
GPL

%ARCH%
any

%BUILDDATE%
1522826386

%PACKAGER%
Bartłomiej Piotrowski <bpiotrowski@archlinux.org>

EDIT: вы также можете анализироватьфайлы базы данных в dicts с чем-то вроде

def read_aur_db_entry(fp):
    db_entry = collections.defaultdict(str)
    key = None
    for line in fp.readlines():
        if line.startswith(b'%') and line.endswith(b'%\n'):
            key = line[1:-2].decode()
            continue
        db_entry[key] += line.decode()
    return {key: value.strip() for (key, value) in db_entry.items()}

, так что вы получите

{'ARCH': 'any',
 'BUILDDATE': '1522826386',
 'CSIZE': '684236',
 'DESC': 'Arch Linux PGP keyring',
 'FILENAME': 'archlinux-keyring-20180404-1-any.pkg.tar.xz',
 'ISIZE': '948224',
 'LICENSE': 'GPL',
 'MD5SUM': '9ba27bf598d60f2ea6320339289a2401',
 'NAME': 'archlinux-keyring',
 'PACKAGER': 'Bartłomiej Piotrowski <bpiotrowski@archlinux.org>',
 'PGPSIG': 'iQEzBAABCAAdFiEE82kWh9hnuBtRzgfZu+Q3cUhzKKkFAlrEfLMACgkQu+Q3cUhzKKmE7ggAgNjBAz6FkFqy2+Q0Rfzt0ZibYT/KW6ibQoKgpxDQNkzcl/1ZVzS4rkZRjHkBJd8fKI2n6NtiijwiQBPBsTI8t4+nVD19C4zZbDHzTdABm4EaDdJg+ya635Df8xMqt6GNzxV5DmABioSww2ebY9EuSwl3yvMNTQUI8hAjWPfOirDRZDic9DEYvhPabUn9NlLzShQeDIZP/R0ejDCfBIcu2NMX+NSUg41w0+LGrLNpqdnI+ej0n3X6NDkvCZwvvC3DPCWs1PAhFS5yC5dve4pDBjf8fLuJBPbRQJx6Se0K0CCoeUVA2V4ld2HLXor1aLG0bijF2QhMLzHmW4XxWbpWLA==',
 'SHA256SUM': '6f0f2f8d72742da18b61b7e4a1900d419c718b6d9dcad804763b80a12cc9abaf',
 'URL': 'https://projects.archlinux.org/archlinux-keyring.git/',
 'VERSION': '20180404-1'}
...