所以我使用HubSpot API来跟踪系统中的“交易”,但是没有一种强大的方法来搜索/过滤它返回的数据。因此,它只是将系统中的所有“交易”转储到一个大的JSON中,然后为您提供一些分页信息,以帮助您将其粘合在后端。
以下是演示/源API网址: https://api.hubapi.com/deals/v1/deal/all?hapikey=demo
这会返回看起来基本上像这样(缩短)的JSON:
{
"deals":[
{
"portalId":62515,
"dealId":17886969,
"isDeleted":false,
"associations":{
"associatedCompanyIds":[
113448746
]
},
"properties":{
"dealname":{
"value":"Google Website"
},
"amount":{
"value":"150000"
},
"hubspot_owner_id":{
"value":"72"
},
"dealstage":{
"value":"qualifiedtobuy"
},
"dealtype":{
"value":"existingbusiness"
}
},
"imports":[
]
}
],
"hasMore":false,
"offset":28692358
}
但是...
1)返回了很多交易,我想通过dealtype
过滤这个,这是一个可以改变的变量。例如,我只想返回价值“qualifiedtobuy”的交易
2)然后我需要根据dealId
运行查询并对每笔交易“做事”。我想这意味着我需要将上述所有内容都变成dict
并以某种方式然后迭代?我不确定。
所以这就是我到目前为止所做的,但这实际上只是抓住JSON并将其转换为dict
(我认为)。
import requests
import json
apikey = "demo"
url = 'https://api.hubapi.com/deals/v1/deal/all?hapikey=' + apikey
response = requests.get(url)
response.raise_for_status()
jsonDeals = response.json()
dict_object = dict(jsonDeals)
我不确定接下来采取什么步骤来获取dealId
值,然后使用返回的每个值“执行操作”。
非常感谢任何帮助。
更新:这是原始字典,未针对一次交易的物业进行简化:
{u'hs_lastmodifieddate': {u'sourceId': None, u'timestamp': 1457479099306, u'versions': [{u'timestamp': 1457479099306, u'sourceVid': [], u'name': u'hs_lastmodifieddate', u'value': u'1457479099306', u'source': u'CALCULATED'}], u'value': u'1457479099306', u'source': u'CALCULATED'}, u'pipeline': {u'sourceId': None, u'timestamp': 1457479063182, u'versions': [{u'timestamp': 1457479063182, u'name': u'pipeline', u'value': u'default', u'sourceVid': []}], u'value': u'default', u'source': None}, u'num_associated_contacts': {u'sourceId': None, u'timestamp': 0, u'versions': [{u'source': u'CALCULATED', u'name': u'num_associated_contacts', u'value': u'0', u'sourceVid': []}], u'value': u'0', u'source': u'CALCULATED'}, u'dealstage': {u'sourceId': None, u'timestamp': 1457479063157, u'versions': [{u'timestamp': 1457479063157, u'sourceVid': [], u'name': u'dealstage', u'value': u'qualifiedtobuy', u'source': u'API'}], u'value': u'qualifiedtobuy', u'source': u'API'}, u'createdate': {u'sourceId': None, u'timestamp': 1457479063181, u'versions': [{u'timestamp': 1457479063181, u'name': u'createdate', u'value': u'1457479063181', u'sourceVid': []}], u'value': u'1457479063181', u'source': None}, u'hs_salesforceopportunityid': {u'sourceId': None, u'timestamp': 1457479097680, u'versions': [{u'timestamp': 1457479097680, u'sourceVid': [], u'name': u'hs_salesforceopportunityid', u'value': u'00628000007nhqFAAQ', u'source': u'SALESFORCE'}], u'value': u'00628000007nhqFAAQ', u'source': u'SALESFORCE'}, u'hubspot_owner_assigneddate': {u'sourceId': None, u'timestamp': 1457479097680, u'versions': [{u'timestamp': 1457479097680, u'sourceVid': [], u'name': u'hubspot_owner_assigneddate', u'value': u'1457479097680', u'source': u'SALESFORCE'}], u'value': u'1457479097680', u'source': u'SALESFORCE'}, u'hubspot_owner_id': {u'sourceId': None, u'timestamp': 1457479097680, u'versions': [{u'timestamp': 1457479097680, u'sourceVid': [], u'name': u'hubspot_owner_id', u'value': u'11626092', u'source': u'SALESFORCE'}], u'value': u'11626092', u'source': u'SALESFORCE'}, u'amount': {u'sourceId': None, u'timestamp': 1457479063157, u'versions': [{u'timestamp': 1457479063157, u'sourceVid': [], u'name': u'amount', u'value': u'150000', u'source': u'API'}], u'value': u'150000', u'source': u'API'}, u'hs_createdate': {u'sourceId': None, u'timestamp': 1457479063181, u'versions': [{u'timestamp': 1457479063181, u'name': u'hs_createdate', u'value': u'1457479063181', u'sourceVid': []}], u'value': u'1457479063181', u'source': None}, u'salesforcelastsynctime': {u'sourceId': None, u'timestamp': 1457479099298, u'versions': [{u'timestamp': 1457479099298, u'sourceVid': [], u'name': u'salesforcelastsynctime', u'value': u'1457479070904', u'source': u'SALESFORCE'}], u'value': u'1457479070904', u'source': u'SALESFORCE'}, u'closedate': {u'sourceId': None, u'timestamp': 1457479099298, u'versions': [{u'timestamp': 1457479099298, u'sourceVid': [], u'name': u'closedate', u'value': u'1461013200000', u'source': u'SALESFORCE'}], u'value': u'1461013200000', u'source': u'SALESFORCE'}, u'dealtype': {u'sourceId': None, u'timestamp': 1457479063157, u'versions': [{u'timestamp': 1457479063157, u'sourceVid': [], u'name': u'dealtype', u'value': u'existingbusiness', u'source': u'API'}], u'value': u'existingbusiness', u'source': u'API'}, u'dealname': {u'sourceId': None, u'timestamp': 1457479063157, u'versions': [{u'timestamp': 1457479063157, u'sourceVid': [], u'name': u'dealname', u'value': u'Google Website', u'source': u'API'}], u'value': u'Google Website', u'source': u'API'}}
答案 0 :(得分:3)
response.json()
返回的对象已经转换为dict
,因此您无需再对其进行任何操作。要获取所有qualifiedtobuy
个交易的列表,请尝试以下内容:
jsonDeals = response.json()
deals = []
for deal in jsonDeals['deals']:
properties = deal['properties']
if ('dealstage' in properties and
properties['dealstage']['value'] == 'qualifiedtobuy'):
deals.append(deal)
if deals:
print(deals[0]['dealId'])
else:
print('found no "qualifiedtobuy" deals')
答案 1 :(得分:0)
import json
dict_object = json.loads(jsonDeals)
会给你你的字典,你不想把字符串转换为字典,因为一些json组件与python中的组件不同,例如小写的真实与python的真实
要与项目进行交互,您只需要根据键
for deal in dict_object['deals']:
print deal['dealId'], 'for instance'
你可以确认jsonDeals
是一个json字符串......如果你在问题的顶部发布了它,它应该有用,我测试了它:
>>> a = """
... {
... "deals":[
... {
... "portalId":62515,
... "dealId":17886969,
... "isDeleted":false,
... "associations":{
... "associatedCompanyIds":[
... 113448746
... ]
... },
... "properties":{
... "dealname":{
... "value":"Google Website"
... },
... "amount":{
... "value":"150000"
... },
... "hubspot_owner_id":{
... "value":"72"
... },
... "dealstage":{
... "value":"qualifiedtobuy"
... },
... "dealtype":{
... "value":"existingbusiness"
... }
... },
... "imports":[
...
... ]
... }
... ],
... "hasMore":false,
... "offset":28692358
... }"""
>>> import json
>>> d = json.loads(a)
>>>
答案 2 :(得分:0)
Python
当然是一种简单的方式,更具可读性。有时我会变懒,所以我只使用jq
(文件:https://stedolan.github.io/jq/)。
对于您的示例,它可以是Bash
中的单行:
curl -s https://api.hubapi.com/deals/v1/deal/all?hapikey=demo | \
jq '.deals[] | select(.properties.dealstage.value=="qualifiedtobuy")'
这将以漂亮的格式为您提供所需的一行。向--compact-output
添加jq
标志将在一行中打印每个对象。然后,如果需要更复杂的操作,可以将输出重定向到文件。
对于测试网址,使用该标志只输出一条记录:
{"portalId":62515,"dealId":17886969,"isDeleted":false,"associations":{"associatedVids":[],"associatedCompanyIds":[113448746],"associatedDealIds":[]},"proper
ties":{"pipeline":{"value":"default","timestamp":1456622756943,"source":null,"sourceId":null,"versions":[{"name":"pipeline","value":"default","timestamp":14
56622756943,"sourceVid":[]}]},"dealname":{"value":"Google Website","timestamp":1456622756908,"source":"API","sourceId":null,"versions":[{"name":"dealname","
value":"Google Website","timestamp":1456622756908,"source":"API","sourceVid":[]}]},"amount":{"value":"150000","timestamp":1456622756908,"source":"API","sour
ceId":null,"versions":[{"name":"amount","value":"150000","timestamp":1456622756908,"source":"API","sourceVid":[]}]},"closedate":{"value":"1461042000000","ti
mestamp":1456622756908,"source":"API","sourceId":null,"versions":[{"name":"closedate","value":"1461042000000","timestamp":1456622756908,"source":"API","sour
ceVid":[]}]},"hubspot_owner_id":{"value":"72","timestamp":1456622756908,"source":"API","sourceId":null,"versions":[{"name":"hubspot_owner_id","value":"72","
timestamp":1456622756908,"source":"API","sourceVid":[]}]},"hs_lastmodifieddate":{"value":"1456622756943","timestamp":1456622756943,"source":"CALCULATED","so
urceId":null,"versions":[{"name":"hs_lastmodifieddate","value":"1456622756943","timestamp":1456622756943,"source":"CALCULATED","sourceVid":[]}]},"hubspot_ow
ner_assigneddate":{"value":"1456622756908","timestamp":1456622756908,"source":"API","sourceId":null,"versions":[{"name":"hubspot_owner_assigneddate","value"
:"1456622756908","timestamp":1456622756908,"source":"API","sourceVid":[]}]},"num_associated_contacts":{"value":"0","timestamp":0,"source":"CALCULATED","sour
ceId":null,"versions":[{"name":"num_associated_contacts","value":"0","source":"CALCULATED","sourceVid":[]}]},"dealstage":{"value":"qualifiedtobuy","timestam
p":1456622756908,"source":"API","sourceId":null,"versions":[{"name":"dealstage","value":"qualifiedtobuy","timestamp":1456622756908,"source":"API","sourceVid
":[]}]},"hs_createdate":{"value":"1456622756943","timestamp":1456622756943,"source":null,"sourceId":null,"versions":[{"name":"hs_createdate","value":"145662
2756943","timestamp":1456622756943,"sourceVid":[]}]},"createdate":{"value":"1456622756943","timestamp":1456622756943,"source":null,"sourceId":null,"versions
":[{"name":"createdate","value":"1456622756943","timestamp":1456622756943,"sourceVid":[]}]},"dealtype":{"value":"existingbusiness","timestamp":1456622756908
,"source":"API","sourceId":null,"versions":[{"name":"dealtype","value":"existingbusiness","timestamp":1456622756908,"source":"API","sourceVid":[]}]}},"impor
ts":[]}
对于简单的字段提取,您可以执行以下操作:
curl -s https://api.hubapi.com/deals/v1/deal/all?hapikey=demo | \
jq --compact-output --raw-output \
'.deals[] | select(.properties.dealstage.value=="qualifiedtobuy") | [.properties.amount.value, .properties.closedate.value, .properties.createdate.value, .properties.dealname.value] | @csv'
这将给出匹配的行,每行包含交易金额,关闭日期,创建日期和交易名称,当然以逗号分隔。 --raw-output
标记取消了引号的转义以使输出更清晰。对于您的测试网址,它会给出:
"150000","1461042000000","1456622756943","Google Website"
更多匹配,更多行。重定向输出并完成您的一天。减少开发时间,改善世界。