2016-10-09 11 views
1

私はTelegramボットを持っていますが、テキストと画像で返信しますが、返信でMP3ファイルを送信する際に問題があります。誰でも助けてくれますか?テレグラムボット(Python)でsendAudioを使うには

コードのこの部分が応答を定義します。

 def reply(msg=None, img=None, aud=None): 
     if msg: 
      resp = urllib2.urlopen(BASE_URL + 'sendMessage', urllib.urlencode({ 
       'chat_id': str(chat_id), 
       'text': msg.encode('utf-8'), 
       'disable_web_page_preview': 'false', 
       # 'reply_to_message_id': str(message_id), 
       'reply_markup': json_keyboard, 
      })).read() 
     elif img: 
      resp = multipart.post_multipart(BASE_URL + 'sendPhoto', [ 
       ('chat_id', str(chat_id)), 
       ('reply_to_message_id', str(message_id)), 
      ], [ 
       ('photo', 'image.jpg', img), 
      ]) 
     elif aud: 
      resp = multipart.post_multipart(BASE_URL + 'sendAudio', [ 
       ('chat_id', str(chat_id)), 
       ('reply_to_message_id', str(message_id)), 
      ], [ 
       ('audio', 'aud.mp3', aud), 
      ]) 
     else: 
      logging.error('no msg or img specified') 
      resp = None 

そして、この一つは、それが返すメッセージのタイプを定義:テキストOT作品に「ワン」と「二」のために

 elif 'Two' in text: 
     img = Image.open('statimg/firstf.jpg') 
     output = StringIO.StringIO() 
     img.save(output, 'JPEG') 
     reply(img=output.getvalue()) 
    elif 'Three' in text: 
     aud = open('statimg/firsta.mp3') 
     output = StringIO.StringIO() 
     aud.save(output, 'MP3') 
     reply(aud=output.getvalue()) 
    elif 'One' in text: 
     # json_keyboard = json.dumps({keym: [bline3]}) 
     bline1 = [b1] 
     bline2 = [b2] 
     json_keyboard = json.dumps({keym: [bline1, bline2]}) 
     if func6.state == 0: 
      reply('Hello text1') 
      func6() 
     elif func6.state == 1: 
      func6() 
      reply('Hello text2') 

を完全に(「One」のテキストと「Two」の画像を返します)、「3」の場合はmp3ファイルを返しません。

何が問題なのですか?ありがとうございます!私が使用しています

答えて

0

を単に問題をこのように解決:

 elif aud: 
      resp = multipart.post_multipart(BASE_URL + 'sendAudio', [ 
       ('chat_id', str(chat_id)), 
       #('caption', 'Music in the park'), 
       ('reply_markup', json_keyboard), 
      ], [ 
       ('audio', 'Play', aud), 
      ]) 

reply(aud=urllib.urlopen('statimg/musone.mp3').read()) 
0

私はあなたがここで io.BytesIO()

を使用する必要があり、問題がoutput = StringIO.StringIO()

であると思うが、作業コードです:

def sendTelegramAudio(self, file_url, text): 
    url = "https://api.telegram.org/botxxx:yyyy/sendAudio"; 
    remote_file = requests.get(file_url) 
    file1 = io.BytesIO(remote_file.content) 
    file1.name = 'audio.mp3' 
    files = {'audio': file1} 
    data = {'chat_id' : "@your_channel", 'caption':text} 
    r= requests.post(url, files=files, data=data) 
    print(r.status_code, r.reason, r.content) 
+0

ありがとうございます! requests.get()を使用せずにこのio.BytesIOアプローチを使用する機会はありますか? multipart.post_multipart()経由でデータを転送するには? –

関連する問題