#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.