

「自然会話ロボットを作ろう！RasberryPiとArduinoで作る人工知能」という書籍を元にPythonの勉強をしています。  
その中にあるコードを指定された通り実行した際にエラーが生じてしまったので質問致しました。

  1. 書籍名  
自然会話ロボットを作ろう！RasberryPiとArduinoで作る人工知能

  2. 該当ページ  
pp.90 - 92

  3. 使用環境  
（書籍に記載された環境と同様 のものを使用）  
PCのOS：Windows7  
環境：RasberryPi3 (M-10414)，Python2

以下にソースコードとエラー内容を記載します。

[code]

    #!/usr/bin/env python
    # coding: UTF-8
    import requests
    import json
    import os
    import time
    GOOGLE_APIKEY = 'Your_Google_APIKEY' #この部分は自分で取得したAPIKEYと差し替え
    VOICE_REC_PATH = '/home/pi/ai/hello.flac'
    
    def recognize():
      print('recognizing...')
      f = open(VOICE_REC_PATH, 'rb')
      voice = f.read()
      f.close()
    
      url = 'https://www.google.com/speech-api/v2/recognize?xjerr=1&client=chromium&' \ 'lang=ja-JP&maxresults=10&pfilter=0&xjerr=1&key=' + \ GOOGLE_APIKEY
      hds = {'Content-type': 'audio/x-flac; rate=11025'}
    
      try:
        rsp = requests.post(url, data=voice, headers=hds).text
      except IOError:
        return '#CONN_ERR'
      expect:
        return '#ERROR'
    
      print 'results:', rsp
      objs = rsp.split(os.linesep)
      for obj in objs:
        if not obj:
          continue
        alternatives = json.loads(obj)['result']
        if len(alternatives) == 0:
          continue
        return alternatives[0]['alternative'][0]['transcript']
        return ""
    
    def current_milli_time():
      return int(round(time.time()*1000))
    if __name__ == '__main__':
      t0 = current_milli_time()
      message = recognize().encode('utf-8')
      print 'recognized:'+str(current_milli_time()-t0)+'ms'
    if(message == '#CONN_ERR'):
      print 'internet not available'
      message = ''
    elif(message == '#ERROR'):
      print 'voice recognizing failed'
      message = ''
    else:
      print 'your words:'+message
    
[/code]

[code]

    Traceback (most recent call last):
      File "/home/pi/ai/test-recognize.py", line 46, in <module>
        message = recognize().encode('utf-8')
      File "/home/pi/ai/test-recognize.py", line 34, in recognize
        alternatives = json.loads(obj)['result']
      File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
        obj, end = self.raw_decode(s, idx=_w(s,0).end())
      File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
        raise ValueError("No JSON object could be decoded")
    ValueError: No JSON object could be decoded
    
[/code]

自分なりにエラー内容について調べてみたのですが、python初心者なので具体的な解決方法がわからず困っています。


CC BY-SA 3.0
2017-02-14T12:42:41.230
32668
2017-04-01T15:12:18.223
2017-02-15T13:18:18.467
5519
20658
question
python
Google Cloud Speech APIのレスポンスをJSONとして読み込めない`ValueError: No JSON object could be decoded`


objがjsonではない、という意味のエラーです。  
requests.postした結果rspを一行ずつjson.loadsしていますが、rspはこの処理が必要なフォーマットなのでしょうか？

`print 'results:', rsp` で画面に表示されるrsp変数の値も提示してくれれば、もう少し詳しく回答できるかもしれません。


CC BY-SA 3.0
2017-02-14T14:38:27.533
32669
2017-02-14T14:38:27.533
806
32668
answer