我使用Google DFP API来收集点击我们网站上的广告的一些统计信息。该
代码是用Python编写的。目前,我正在尝试升级代码以使用oAuth 2.
因为,代码每天自动运行而没有任何用户参与,我创建了一个
我的Google项目下的服务帐户,并将该帐户添加到DoubleClick for
我们公司的出版商网络。根据网络上的示例代码,我写了这个:
import httplib2
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build
from googleads.dfp import DfpClient
GOOGLE_DFP_SCOPE="https://www.googleapis.com/auth/dfp"
API_VERSION="v201411"
KEY_FILE="*******.p12"
ACCT_EMAIL="************************@developer.gserviceaccount.com"
NETWORK_CODE="**********"
with open(KEY_FILE) as config_file:
my_private_key = config_file.read()
credentials = SignedJwtAssertionCredentials(service_account_name=ACCT_EMAIL, private_key=my_private_key,scope=GOOGLE_DFP_SCOPE)
http = httplib2.Http()
http_auth = credentials.authorize(http)
dfp_client = build(serviceName='dfp',version=API_VERSION,http=http_auth)
此代码似乎不正确,因为尚未传递network_code 代码中的任何地方。此外,它失败并显示以下消息:
apiclient.errors.UnknownApiNameOrVersion:name:dfp version:v201411。
另外,下面一行:
dfp_client = DfpClient.LoadFromStorage()
对我的情况不起作用,因为这是基于googleads.yaml的 仅针对具有客户端密钥的Web应用程序帐户进行格式化,而不是P12私钥。
有什么建议吗?感谢。
答案 0 :(得分:2)
Apiclient.discovery使用默认route来检查服务。 但我没有为DFP广告管理系统找到服务。
我使用此代码将API与Oauth2一起使用。使用Flask
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c;
FILE *from, *to;
from = fopen("file.txt", "r");
if (from == NULL)
{
perror("file.txt doesn't exist.");
exit(1);
}
to = fopen("copy.txt", "w");
if (to == NULL)
{
perror("copy.txt doesn't exist.");
exit(1);
}
do
{
c = getc(from);
putc(c, to);
}
while(c != EOF);
fclose(to);
fclose(from);
exit(0);
}
我希望这可以帮到你
答案 1 :(得分:0)
你是对的。您必须在创建dfp客户端时传递网络代码。并且版本不是必需的。尝试使用以下代码在python中创建客户端。
import os
from googleads import oauth2
from googleads import dfp
def get_dfp_client():
application_name = "Your application name" # from google developer console. eg: Web Client
network_code = ********
private_key_password = 'notasecret'
key_file = os.path.join('path/to/p12file')
service_account_email = '****@***.iam.gserviceaccount.com'
# create oath2 client(google login)
oauth2_client = oauth2.GoogleServiceAccountClient(
oauth2.GetAPIScope('dfp'), service_account_email, key_file)
dfp_client = dfp.DfpClient(oauth2_client, application_name, network_code)
return dfp_client
client = get_dfp_client()
如果您需要更多说明,请发表评论。
<强>更新强>
googleads将模块dfp重命名为ad_manager,文档here - Gocht