Рубрики
Без рубрики

Автоматическое распределение эфирного времени с использованием Google Forms, Python, AfricaS Talom API API и Heroku

Моя предыдущая статья о автоматизации наград клиентов, используя эфирное время, собрало много внимания и … Теги с Python, учебным пособием, GoogleCloud, африканскими.

Моя предыдущая статья о автоматизации наград клиентов, используя эфирное время, набрало большое внимание и читает.

Автоматизируйте награды клиентов с помощью Python, PostgreSQL и AfricaS говорят

Коды зоопарка · 15 · 9 мин прочитаны

Это, конечно, ведет меня, чтобы понять, что хорошее количество людей заинтересованы в теме. Эта статья будет охватывать аналогичные темы только с другим рабочим процессом. Быстрое обновление жизни, я недавно присоединился к престижному Moringa School обновить свои навыки развития программного обеспечения. Теперь из-за пандемии COVID-19 мы в основном учимся удаленно, это требует подключения к Интернету. Школа обеспечивает эфирное время через 3-я партийную компанию. Тем не менее, я получил представление о варианте на основе DIY, отсюда и этот проект.

Этот проект будет использовать:

  • Google Forms Чтобы собрать информацию студентов (имя, номер телефона).
  • Google Piels для хранения и проверки данных.
  • Python Как наш язык выбора Чтобы получить необходимые данные, отправлять запросы на эфирную конечную точку Africas Talking API
  • Heroku провести и запланировать наш скрипт.

Предварительные условия

Следовать по этому посту и введите те же функции. Вам нужно понадобиться несколько вещей:

  • Python и Pip (в настоящее время я использую 3.9.2) Любая версия выше 3.5 должна работать.
  • AfricaS говорят аккаунт Отказ

    • API ключ и имя пользователя из вашей учетной записи. Создайте приложение и обратите внимание на ключ API.
      • Кроме того, вам нужно будет запросить их, чтобы включить доступ эфирного времени для вашей учетной записи. Отправить свое эфирное время для дальнейшего разъяснения

    Как только вы получили вышеупомянутые: – Создайте новый каталог и измените его.

    • Создайте новую виртуальную среду для проекта или активируйте предыдущую.
    • Использование Python Package Manager (PIP), установка: африканский Python SDK, библиотека Python-Dotenv, библиотеки GSPREAD.
    • Сохраните установленные библиотеки в файле требований.

В качестве альтернативы, проверьте готовый код на Гадость

Kenmwaura1/автоматическое эфирное время

Это простой сценарий Python для автоматизации выделения эфирных веществ с использованием Google Forms, Python и африканский

Формы для всех

Чтобы понять этот процесс, давайте сначала создадим форму Google. Посетить эта ссылка и создать новую форму. Пример, как показано ниже:

Следующим шагом является аутентифицировать сценарий Python, а нашу локальную среду разработки с Google. Это позволяет нам получить доступ к данным Google Form из Google Drive, позволяя API Google Drive в консоли платформы Google Cloud Platform.

Чтобы завершить настройку нашей формы:

  1. Перейти к форме Google
  2. Вкладка ответов,
  3. Нажмите значок электронной таблицы
  4. И создайте новую таблицу назначения для нашей Google Form.

Электронная таблица будет создана и сохранена Google Drive. Чтобы интегрировать нашу среду Python и Google Drive. Сначала мы должны аутентифицироваться с Google.

Аутентификация для победы!

Теперь, чтобы взаимодействовать с API Google Drive, мы должны настроить нашу учетную запись, включить дисковод Google и API Google Pools и получить файл Credentals.json.

  1. Перейти к Консоль платформы Google Cloud , нажмите на новый проект/проекты → Новый проект, на панели инструментов GCP.

  2. Введите имя для нашего проекта и нажмите «Создать».

Для доступа к электронным таблицам через API Google Pailets требуется аутентификация. Есть два способа пойти в это:

  • Сервисная учетная запись В основном используется для доступа к электронным пунктам от имени бота.
  • Oauth Client ID – Если вы хотите получить доступ к электронным таблицам от имени конечных пользователей (включая себя).

API доступ для нашего проекта

  1. Гель до Консоль разработчиков Google и создать новый проект (или выберите тот, который у вас уже есть).
  2. В поле «поиск APIS и услуги», поиск «API Google Drive API» и включите его.
  3. В поле «поиск APIS и услуги», поиск «API Google API» и включить его.

Настройка учетной записи службы

Для этого проекта я использовал учетную запись службы, однако не стесняйтесь идти по маршруту ОАУТ, если вы предпочитаете. Учетная запись Service – это специальный тип учетной записи Google, предназначенную для представления неиспорченного пользователя, который необходимо подтвердить и быть авторизованным для доступа к данным в Google API.

Поскольку это отдельная учетная запись, по умолчанию у него нет доступа к любой электронной таблице, пока вы не поделитесь этим этим аккаунтом. Как и любой другой аккаунт Google.

Вот как получить один:

  1. Включить доступ API для проекта (как показано выше), если вы еще этого не сделали.
  2. Перейдите в «APIS & Services> учетные данные» и выберите «Создать учетные данные> ключ службы учетной записи».
  3. Заполните форму.
  4. Нажмите «Создать» и «Готово».
  5. Нажмите «Управление учетными записями обслуживания» над учетными записями обслуживания.
  6. Нажмите на ⋮ рядом с недавно созданной учетной записью услуги и выберите «Управление ключами», а затем нажмите «Добавить клавишу»> «Создать новую клавишу».

  7. Выберите тип ключа JSON и нажмите «Создать».

Вы автоматически загрузите файл JSON с учетными данными. Это может выглядеть так:

{
  "type": "service_account",
  "project_id": "api-project-XXX",
  "private_key_id": "2cd … ba4",
  "private_key": "-----BEGIN PRIVATE KEY-----\nNrDyLw … jINQh/9\n-----END PRIVATE KEY-----\n",
  "client_email": "473000000000-yoursisdifferent@developer.gserviceaccount.com",
  "client_id": "473 … hd.apps.googleusercontent.com",
  ...
}

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

В качестве альтернативы проверьте загруженный файл JSON для значения Client_email.

  1. Очень важно! Перейдите на свою электронную таблицу и поделитесь им с помощью Client_email с шага выше. Как вы делаете с любой другой учетной записью Google. Если вы этого не сделаете, вы получите gspread.exceptions. Spreadsheetnotfound Исключение при попытке получить доступ к этой электронной таблице из вашего приложения или скрипта.

Примечание : Этот секретный файл JSON и файл Python, созданный ниже, должны присутствовать в одном каталоге.

Извлечение данных из листов Google

Это наш лист Google, который мы будем извлекать данные из:

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

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

touch airtime_disbursal.py
# airtime_disbursal.py 
import os
import africastalking as at
from dotenv import load_dotenv
import gspread

Теперь создайте переменную с помощью библиотеки GSPread, метод Service_account и наш загруженный файл JSON для аутентификации нашего запроса. Тогда мы создадим функцию get_spreadsheet_data. который принимает имя электронного листа и индекс требуемого листа в качестве аргументов. Функция будет запрошен для указанной электронной таблицы и листа, а затем вернуть все значения, кроме заголовков столбцов.

def get_spreadsheet_data(sheet_name, worksheet_index):
    #make a request to Google specifying the spreadsheet required
    sheet = gc.open(sheet_name).get_worksheet(worksheet_index)
    # by specifying the index we remove the column headers
    return sheet.get_all_values()[1:]

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

sheet_index = 0
airtime_sheet_name = 'Contact Information (Responses)'
sheet_data = get_spreadsheet_data(airtime_sheet_name, sheet_index)
print(sheet_data)

Эфирное время для всех!

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

touch .env
# .env 
at_username=enter your at_username
at_api_key=enter your api_key

Убедитесь, что вы получите правильные полномочия от своего алкогольного портала Африки.

# Load our sensitive information using environment variables
load_dotenv()
# get the environment values from the .env file
at_username = os.getenv('at_username')
at_api_key = os.getenv('at_api_key')

# initialize africas talking using username and api key
at.initialize(at_username, at_api_key)
airtime = at.Airtime
account = at.Application

Снаппет выше использует load_dotenv () Функция для загрузки наших конфиденциальных данных из переменных среды. Затем мы назначаем переменные для каждого значения окружающей среды. Затем мы создали Африки, говорящие клиенту, передав нашу API_KEY. и AT_USERNAME Переменные. Наконец, мы назначаем классы эфирного времени и приложений в переменные.

def airtime_disbursal(number, airtime_amount: str, airtime_currency_code: str):
    print(account.fetch_application_data())

    try:
        response = airtime.send(phone_number=number, amount=amount, currency_code=currency_code)
        print(response)
    except Exception as e:
        print(f"Encountered an error while sending airtime. More error details below\n {e}")


Снаптеп выше создает airtime_disbursal Функция, которая принимает 3 аргумента: номер (номер телефона каждого получателя), airtime_amount (количество эфирного времени для отправки каждому получателю) и airtime_currency_code (3-значный код валюты, требуемый AfricaS, разговаривая). Затем мы приступаем к распечатанию нашего баланса счета, используя fetch_application_data () метод. Наконец, мы напишем блок Try-Catch для удержания логики для отправки эфирного времени. Здесь мы передаем наши аргументы по мере необходимости. Прочитайте Документы Чтобы получить больше информации.

# Set The 3-Letter ISO currency code and the amount
amount = "5"
currency_code = "KES"

# Unpack the list of values
for item in sheet_data:
    print(item[4])
    mobile_number = item[4]
    # for each number in the sheet send airtime top-up as specified.
    airtime_disbursal(mobile_number, amount, currency_code)

print(account.fetch_application_data())

Вышеупомянутый блок кода определяет переменную суммы и присваивает значение 5. Это очень для демонстрации в производственной среде, вы, вероятно, будете иметь переменные суммы для разных получателей. Затем мы определяем наш код валюты как KES. Это важно, так как он говорит API, какую валюту выплатить эфирное время. Затем мы добавляем для цикла, чтобы распаковать наши STEST_DATA список. Последний элемент в списке содержит необходимый номер телефона. Мы продолжаем назначить его переменной. Затем мы называем нашими airtime_disbursal Функция на каждом значении в списке. Функция будет проходить через другой номер телефона на каждом запуске, пока список не будет завершен. Затем мы запрашиваем баланс нашего аккаунта после завершения цикла.

Развертывание

Теперь для нашего решения для автоматизации нам нужно развернуть его до облака и запустить его на запланированных интервалах. Там много хороших облачных поставщиков, которые мы могли бы использовать, тем не менее, Heroku вынимает торт за простоту развертывания и свободный уровень, который будет достаточно для демонстрационных целей. Это достаточно легко, чтобы выбрать любой другой поставщик облака E, G. Цифровой океан, AWS, GCP и т. Д.

После создания учетной записи и входа в систему я рекомендую установить Heroku Cli Для более легкого времени во время развертывания. Теперь давайте начнем развертывать: просто делай Heroku Create Create - App автоматическое ветровое время Отказ Если вы отправитесь на приложение Dashboard, вы увидите ваше новое приложение. В качестве альтернативы используйте браузер для создания приложения. Нам нужно создать файл runtime.txt, чтобы сказать Heroku, какую версию Python мы хотим работать. Я устанавливаю мой до 3.9.2, чтобы повторить мою среду развития.

  echo "python-3.9.2" > runtime.txt

Нам также нужно указать config vars . что Heroku будет использовать во время выполнения. Это похожее, как мы были Хранение наших учетных данных в файле .env .ens. Вы можете либо установить их через консоль Heroku в браузере или клемме, используя Heroku CLI. Убедитесь, что вы измените значения на ваши фактические учетные данные.

  heroku config:set at_api_key=api_key_here
  heroku config:set at_username=Username_here

Теперь нам нужно инициализировать Git Reppo и протолкнуть код на Heroku:

  git init
  heroku git:remote -a heroku create --app automatic-airtime
  git add .
  git commit -am 'Deploy airtime disbursal script'
  git push heroku master

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

Ваше приложение сейчас на Heroku, но это ничего не делает. Поскольку этот маленький скрипт не может принимать HTTP-запросы, идут на автоматическое значение. Но это не должно быть проблемой. Чтобы этот скрипт запустил, как запланировано, нам нужно использовать дополнение Heroku под названием «Расширенный планировщик». Чтобы установить это дополнение, нажмите кнопку «Настроить надстройки» на приложении приложений.

Затем, на панели поиска, ищите расширенный планировщик:

Нажмите на результат, выберите бесплатный план и нажмите на форму отправки.

Если вы вернетесь к вашему приложению приложение, вы увидите надстройку:

Нажмите на ссылку «Расширенный планировщик», чтобы настроить задание. Затем нажмите «Создать триггер».

Вот введите имя для триггера, установите TimeZone и для команды запуска Выберите Python Airtime_disbursAl.py.

Установите состояние на «Active», введите «RECURRING» и выберите «График Helper» в разделе расписания. В этом случае я устанавливаю единицу времени на «еженедельно» для демонстрационных целей. Однако не стесняйтесь корректировать, поскольку ваши потребности диктуют. Для интервала его набор для каждой «пятницы» в «04.00 вечера»

В то время как все, что мы использовали до сих пор на Heroku, предоставляется бесплатный планировщик, запустит работу в бесплатной пробной версии. Что позволяет для 3 триггеров до 100 прогонов, которые подходит здесь оттуда, он подходит до 15 долларов в месяц. Проверьте дальше на Ценовая страница Отказ

Вывод

Первоначально мы изначально изложили для создания решения DIY для запланированного выделения эфирного времени с использованием установленного количества инструментов. Для нас рабочий процесс – это Google Forms -> Google Pailets -> Python -> Африка, разговоры -> Heroku -> Получатель. Теперь этот подход работает хорошо и, как и ожидалось, однако, требует понимания различных деталей и услуг, необходимых таким образом не для всех. Как указано в начале этой статьи, там различная третья сторона, которую подключаются и играют варианты воспроизведения. Выберите лучший вариант для вашего использования в использовании.

Я надеюсь, что вам понравился этот пост и что вы научились, читая это. Я искренне верю, что этот вид проекта является одним из лучших способов изучения новых инструментов и концепций. Если у вас есть какие-либо вопросы или комментарии. Дайте мне знать в комментариях или на Twitter Отказ

Счастливое кодирование!

Оригинал: “https://dev.to/ken_mwaura1/automated-airtime-disbursal-using-google-forms-python-africas-talking-airtime-api-and-heroku-3ef2”