Я использую пакетные запросы в Google Analytics API (Python). Ссылка на пакетную обработку: https://developers.google.com/api-client-library/python/guide/batch Пакетная обработка работает нормально, когда все записи через .add() верны (действительны). Если одно или несколько значений являются недопустимыми, пакетная обработка завершается с ошибкой для всех записей.
Я добавил функцию обратного вызова для обработки ошибки и увидел, что запрос BAtching не работает для всех записей в пакете (в отличие от только недопустимой записи). Есть ли способ обработать ошибку и пропустить недопустимую строку/запись и продолжить работу с остальными записями в пакете?
Ниже приведен пример кода, который я использовал, и сообщение об ошибке:
def add_user_callback(request_id, response, exception):
if exception:
print "error :",exception
else:
print "successful"
def main():
## code to set the account, property and other variables
batch.add(service.management().webpropertyUserLinks().insert(
accountId=account_id,
webPropertyId=property_at,
body={
'permissions': {
'local': [
'READ_AND_ANALYZE'
]
},
'userRef': {
'email': '[email protected]'
}
}))
batch.add(service.management().webpropertyUserLinks().insert(
accountId=account_id,
webPropertyId=property_at,
body={
'permissions': {
'local': [
'READ_AND_ANALYZE'
]
},
'userRef': {
'email': '[email protected]' ## i used a dummy id : [email protected]
}
}))
batch.execute()
#Error :
#error : <HttpError 400 when requesting https://www.googleapis.com/analytics/v3/management/accounts/62974313/webproperties/UA-62974313-35/entityUserLinks?alt=json returned "Value for field user.email = [email protected] is not valid.">
#error : <HttpError 400 when requesting https://www.googleapis.com/analytics/v3/management/accounts/62974313/webproperties/UA-62974313-11/entityUserLinks?alt=json returned "Value for field user.email = [email protected] is not valid.">
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
request_id
в методе add, чтобы отслеживать неудачные запросы, и повторите попытку только с правильно отформатированными запросами. Все пакетные запросы должны быть атомарными, так как может потребоваться несколько запросов для изменения ACL одного пользователя — представьте запросы, необходимые для перемещения пользователя с уровня учетной записи на уровень представления. - person Matt   schedule 25.02.2016bad_email = re.search(r'[a-zA-Z0-9]*@[a-z]*[.][a-z]*\S',str(exception)) bad_emails.append(bad_email) print "emails in the bad_emails list:",bad_emails[0] create_batch(email_list, bad_emails)
create_batch() здесь вызывает функцию для создания пакета (без bad_emails) - person Data Enthusiast   schedule 25.02.2016