1

私はPython DjangoとrestフレームワークでAPIを書いています。私はpython-amazon-simple-product-apiというPythonパッケージを使用して、アマゾン広告APIにアクセスしています。私は残りのフレームワークに結果をフィードし、JSONとして結果を返そうとしています。これまでのところ私のコードです。Python-amazon-simple-product-apiの結果をDjangoを使ってjsonに変換します。

class AmazonProductsViewSet(viewsets.ViewSet): 
    def list(self, request, format=None): 
     products = amazon.search(Brand="Microsoft", SearchIndex="Software", 
           ResponseGroup="Images,ItemAttributes,Accessories,Reviews,VariationSummary,Variations") 
     products = list(products) 

このコードでは、次のエラーが発生します。

TypeError: Object of type 'AmazonProduct' is not JSON serializable 

したがって、私は、AmazonProductオブジェクトをシリアライザブルまたはより良い解決策にする方法を見つけようとしています。

答えて

0

おそらく最良の方法は、アマゾン結果をそのままJSONに変換したい場合は、代わりにボトルネイル[https://github.com/lionheart/bottlenose]を使用することです。ここで私はそれをやったのです。

amazon = bottlenose.Amazon(access_key_id, secret_key, associate_tag) 
class AmazonProductsViewSet(viewsets.ViewSet): 
    def list(self, request, format=None): 
     response = amazon.ItemSearch(Keywords="Kindle 3G", SearchIndex="All") 
     return Response(xmltodict.parse(response)) #json.dumps(xmltodict.parse(response)) 

ここで、XMLドキュメント全体がJSONとして取得されます。

1

JSONをシリアル化できないということは、応答がネットワーク経由で送信できるプリミティブなデータではないオブジェクトであることを意味します。

そのモデルのシリアライザを作成する必要があります。このような何か:

class AmazonProductSerializer(serializers.Serializer): 
    color = serializers.CharField() 
    title = serializers.CharField() 

とこのようにそれを使用します。

products = amazon.search(Brand="Microsoft", SearchIndex="Software", ResponseGroup="Images,ItemAttributes,Accessories,Reviews,VariationSummary,Variations") 

data = AmazonProductSerializer(products, many=True).data 
return Response(data, status=status.HTTP_200_OK) 

はそれが役に立てば幸い!

関連する問題