Найти - Пользователи
Полная версия: Нужны примеры формирования запросов к API Unisender
Начало » Python для новичков » Нужны примеры формирования запросов к API Unisender
1 2
paradigm
Добрый день!

Пока ещё не освоился со структурами в Питоне.

Потому не получается понять - как надо сформировать запрос к функции API на питоне, например, при добавлении нового пользователя в Юнисендер.
Описание функции API: http://www.unisender.com/ru/help/api/importContacts.html

Знакомые, сами не пишущие на Питоне- дали подсказку, как её, якобы, использовать:
api.importContacts(field_names='email', field_names='Name',data='1@1.com',data='Kir')

Однако этот вариант не работает, ругается на неправильное использование ключевого слова:
SyntaxError: keyword can't be an expression

Нужна Ваша помощь!


Также желателен пример как грамотно раскодировать ответ запроса.

Я сейчас делаю это топорно:

answer = api.importContacts('field_names=“email”, field_names=“Name”','data=“1@1.com”,data=“Kir”')

for lines in answer:
print ‘===’,lines,'==='
print ‘###1: ’, answer
s0rg
По указанной вами ссылке - описание http api. Вы используете некую сущность ‘api’ у которой дергаете методы, логично предположить что ваше ‘api’ - это некая обвязка к апи из описания, вот в доках этой обвязки и смотрите.
paradigm
s0rg
По указанной вами ссылке - описание http api. Вы используете некую сущность ‘api’ у которой дергаете методы, логично предположить что ваше ‘api’ - это некая обвязка к апи из описания, вот в доках этой обвязки и смотрите.

Документации для Питона нет. Есть примеры-обёртки для Рельсов и Сишарпа..

По Питону я только нашёл пару малоинформативных сырцов в архиве на их сайте.

Например есть вот такой тестовый запрос внутри класса:

    def testMethodGetLists(self):
        title = u'Рассылка'
        lists = self.api.getLists()
        self.assertTrue(title in lists['result'][0]['title'])
Ок.
А как мне сформировать самому структуру вида
lists['result'][0]['title']
чтобы передать её потом в функцию?

Вот таких азов я не знаю.
Знал - экспериментировал-бы скармливанием разных данных в API..
s0rg
Если я все правильно понял из кода модуля, то вам нужно что-то такое:
api.importContacts({
    'field_names': ['email', 'Name'],
    'data': ['1@1.com', 'Kir']
})
Обратите внимание, что порядок полей в field_names должен _точно_ совпадать с порядком данных для них в ‘data’, но api жуткий конечно ))
paradigm
Итак, у меня всё заработало после некислого пути и труда.

Пишу “формулу счастья”.

Сначала надо найти файл pyunisend.py и в нём поменять строку
self.default_params = {'api_key':api_key, 'format':format, 'test_mode':test_mode}
на
self.default_params = {'api_key':api_key, 'format':format}

Если этого не сделать - наши запросы к АПИ Юнисендера будут утыкаться в ошибку вида
code: invalid_arg
error: Некорректный параметр 'test_mode'


Затем уже правильное обращение к API для добавления пользователей в указанные номера подписочных листов и парсинг ответа:
(код дико корявый, вы точно сможете написать лучше
    ## Заливаем новых пользователей в базу Юнисендера в разные списки по их полу
    api = PyUniSend('ВАШ АПИ-КЛЮЧ')
    # Добавление новых пользователей в базу Юнисендера
    # http://www.unisender.com/ru/help/api/importContacts.html
    print 'Добавляем новых пользователей в Юнисендер..'
    answer = api.importContacts({'field_names': ['email', 'Name', 'email_list_ids'], 'data': [ ['Kir', '1@1.com', '1705282'], ['Andrew', '2@1.com', '1705282'] ]})
    for lines in answer: 
        print '===',lines,'==='
        print '###1: ', answer[lines], '\n'
        if lines=='result':
                for st in answer[lines]:
                    if st in ['updated','deleted', 'new_emails', 'total', 'inserted'] : 
                          print '  = '+st+':',answer[lines][st]
                    else:
                          if st=='log':
                              # Разбираем лог..
                              print '  = '+st+':'
                              for log_line in answer[lines][st]:
                                  print 'index',log_line['index'], '\nmessage', log_line['message'], '\ncode', log_line['code'],'\n'
                              
                          else:
                              # Неизвестный параметр, просто выводим его на печать
                              print '  = ',st,':',answer[lines][st]
            
  
    # Активация новых пользователей в Юнисендере
    # http://www.unisender.com/ru/help/api/activateContacts.html
    print '\nАктивируем новых пользователей..'
    answer = api.activateContacts({'contact_type': 'email', 'contacts': [ '1@1.com', '2@1.com']})
    for lines in answer: 
        print '===',lines,'==='
        print '###1: ', answer[lines]
Marina
Добрый день, подскажите с чем может быть связана ошибка для этого модуля?
 from pyunisend import PyUniSend
ImportError Traceback (most recent call last)
<ipython-input-6-0fe251b8fe13> in <module>()
—-> 1 from pyunisend import PyUniSend

ImportError: cannot import name ‘PyUniSend’
py.user.next
Marina
Добрый день, подскажите с чем может быть связана ошибка для этого модуля?
ImportError: cannot import name 'PyUniSend'
Версия модуля могла измениться и там имена могли переделать разработчики модуля. То есть код писали для одной версии, а ты его запускаешь на другой версии.
Marina
Да вроде то же имя используется class PyUniSend(object)
py.user.next
Выполни
  
import pyunisend
print(pyunisend.PyUniSend)
Marina
Да, тоже самое тогда я вообще не понимаю как получить этот объект.
api = PyUniSend('ВАШ АПИ-КЛЮЧ')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB