2016-03-30 11 views
0

Mailchimpに特定のリスト(固有のlistidを持つ)からすべてのサブスクライバの電子メールアドレスを取得しようとしています。pythonを使用して、mailchimpの特定のリストからサブスクライバのすべての電子メールアドレスを取得する

本文を印刷すると、出力は以下のようにjson形式になります。

私はjsonを辞書に変換しようとしています。

辞書に変換された後、私はすべてのemail_addressを取得したいと思います。

すべてのメールアドレスを取得したら、md5を使用して暗号化します。

しかし、私は 'TypeError:expected string or buffer'というエラーが発生します。

私は本当にPythonには新しく、解決しようとしましたができませんでした。私の質問を見てくれてありがとう。

/* My python code */ 

params = { 
    'apikey': 'xyz', 
    'listId': 'abc' } 

config = MailChimpConfig() 
endpoint = "https://us5.api.mailchimp.com/3.0/lists/'listId'/members? 
apikey='apikey'&status=subscribed" 

while True: 
    response = requests.get(endpoint, auth=('apikey', config.apikey), 
          params=params, verify=False) 
    try: 
    response.raise_for_status() 

    body = response.json 
    dict = json.loads(body) 
    print(dict.members[0].email_address) 
    break 
    except requests.exceptions.HTTPError as err: 
    print "Error: {} {}".format(str(response.status_code), err) 
    print json.dumps(response.json(), indent=4) 
    break 
    except ValueError: 
    print "Cannot decode json, got %s" % response.text 
    break 
    /* end of my python code */ 



/* If I print body, the output is in json format as below:*/ 

{ 
- members: [ 
    - { 
     id: "", 
     email_address: "[email protected]", 
     etc:"" 
    }, 
    - { 
     id: "", 
     email_address: "[email protected]", 
     etc:"" 
    } 

/* end of json format */ 
+0

* Aside *:あなたにはお試しくださいあなたのプログラムの変数として組み込み関数の名前を指定します。 'dict'は辞書オブジェクトを構築するためのファクトリ関数です。その名前を選んだ場合は、その後に 'dict()'を呼び出すことはできません。 –

+0

また、 '-'はJSONテキストに文字通り存在していますか?もしそうなら、私はそれが有効なJSONだとは思わない。 –

+0

APIのv3を使用している場合、サブスクライバのIDは電子メールアドレスのmd5 hasです。 – TooMuchPete

答えて

1

これは適切ではない。

body = response.json 
dict = json.loads(body) 

response.jsonは、それが関数である、JSONオブジェクトまたはstrありません。呼び出されると、レスポンスのJSONからのデータを表すPythonオブジェクトを返します。

この試してみてください:あなたは、むしろ1つのMD5これを印刷したい場合

# UNTESTED 
for address in addresses: 
    print(hashlib.md5(address.encode('utf-8')).hexdigest()) 

:あなたはアドレスのリストを持っていたら、あなたは以下のようなものを各アドレスのMD5ダイジェストを印刷することができ

# UNTESTED 

# Interpret the JSON string: 
data = response.json() 

# Print one of the email addresses: 
print(data['members'][0]['email_address']) 

# Print all of the email addresses 
addresses = [x['email_address'] for x in data['members']] 
print(addresses) 

# UNTESTED 
md5 = hashlib.md5() 
for address in sorted(addresses): 
    md5.update(address.encode('utf-8')) 
print(md5.hexdigest()) 
+0

あなたの提案をありがとう。私は編集しましたが、コンパイル後にTypeErrorがあります: 'instancemethod'オブジェクトに属性 '__getitem__'がありません – user21

+0

あなたは私の主なポイントを逃したようです: "json"という単語の後にかっこを入れる必要があります: 'data = response.json ) ' –

+0

こんにちは、ロブ、ありがとう!私は電子メールアドレスが最終的に印刷されたことをとてもうれしく思います!あなたはそれをmd5に変換する方法を知っています – user21

関連する問題