Используйте executeScript с Python для записи JSON в файл

#python #apache-nifi

Вопрос:

Я пытаюсь получить доступ к API GitHub и записать содержимое в потоковый файл. Я мог бы либо создать файл потока в скрипте Python, либо использовать GenerateFlowFile и отправить его в скрипт, я не привередлив. Код, который у меня есть до сих пор для создания JSON, выглядит следующим образом (используя urllib в соответствии с Jython):

 import urllib.request
import json

headers = {
    'Content-Type': 'application/json {}'.format('cat'),
    'Authorization': 'token TOKEN_TEXT'
}

page = 1
response_text = []

while page > 0:
    req = urllib.request.Request(url="GITHUB_API_URL".format(page),
                                 data=None, headers=headers)
    
    with urllib.request.urlopen(req) as resp:
        data = json.loads(resp.read().decode("utf-8"))

    
        if len(data) == 0:
            break
        else:
            response_text.extend(data)
            page  = 1
 

Я подтвердил, что получаю JSON по желанию, мне действительно просто нужно записать response_text файл потока, чтобы передать его следующему процессору в моем потоке. Я пытался исследовать, но, похоже, не могу найти никакой жесткой документации по процессору executeScript (если вы знаете, где я мог бы это найти, я бы тоже был признателен).

Комментарии:

1. Это python 2?

2. Нет, python 3. Я читал, что executeScript работает только с чистыми библиотеками python, поэтому я постарался ограничить его только json и urllib

3. Рассмотрим процесс ExecuteStreamCommand, чтобы вы могли использовать стандартный Python вместо Jython. Вы можете передавать параметры командной строки и задавать переменные ENV. Установите PYTHONPATH для поиска модулей. Эта команда заменяет файл потока.

Ответ №1:

Я написал серию статей под названием Кулинарная книга executeScript (часть 1, часть 2 и часть 3), которая имеет (среди других поддерживаемых языков) Jython примеры распространенных вызовов API NiFi. Взгляните на Часть 2, в которой рассматривается ввод-вывод потоковых файлов. Я должен упомянуть, что движок сценариев Jython, используемый в NiFi, основан на Python 2, а не на 3.