Отправка смс с помощью провайдера bulksms

Я использую службу массовой рассылки смс, https://www.bulksms.com,

Я не могу отправить арабское сообщение из-за кодировки.

message = بريستيج
vals = {
      'username': gateway.login,
      'password': gateway.password,
      'message': message,
      'msisdn': mobile,
}
urllib.urlencode(vals)
req = urllib2.Request(url, params)
f = urllib2.urlopen(req)

UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-6: порядковый номер не в диапазоне (128)

Я исправил эту проблему с помощью: message.encode('utf8')

но когда сообщение отправляется, замените char на ??? ?????? char

Спасибо за помощь


person user1576199    schedule 23.10.2017    source источник


Ответы (1)


Предполагая, что вы используете предыдущий EAPI от BulkSMS.com, для SMS с кодировкой Unicode вам необходимо добавить dca=16bit к URL-адресу и закодировать тело сообщения в шестнадцатеричном формате — см. Как отправлять SMS-сообщения в формате Unicode (16-разрядные)? в FAQ.

Было бы гораздо проще использовать новый JSON API, который примерно соответствует вашим ожиданиям. во-первых, без лишних усилий:

# coding=utf-8
import json
import urllib
import urllib2
import base64

data = {
      'to': '+1234567890',
      'body': 'بريستيج'
}

encodedData = json.dumps(data, encoding="utf-8", ensure_ascii=False)
request = urllib2.Request('https://api.bulksms.com/v1/messages?auto-unicode=true')
request.add_header('Content-Type', 'application/json;charset=utf-8')
base64string = base64.b64encode('%s:%s' % ('your_username', 'your_password'))
request.add_header("Authorization", "Basic %s" % base64string)
f = urllib2.urlopen(request, encodedData)
response = f.read()
f.close()
print response
person PaoloC    schedule 24.10.2017
comment
Как преобразовать в шестнадцатеричный? Если возможно, пожалуйста, дайте мне пример. - person user1576199; 25.10.2017
comment
Я добавил проверено с 16-битным dca в сообщении. Как вы конвертируете сообщение в шестнадцатеричный формат. Возможно, пожалуйста, дайте мне пример json api - person user1576199; 25.10.2017
comment
Я добавил пример Python, используя JSON API. Я не ответил на ваш вопрос о шестнадцатеричном кодировании, потому что, надеюсь, вы выберете вариант JSON API. - person PaoloC; 27.10.2017