用Python的Django框架编写从Google Adsense中获得报表的应用

首先让我们来讲解一下用Python的Django框架编写从Google Adsense中获得报表的应用的完整攻略。

1.准备工作

在开始编写应用程序之前,您需要准备以下工具和框架:

  • Python 3.6+
  • Django 2.x
  • Google Adsense API
  • Google OAuth2认证

2.创建Google OAuth2应用程序

在项目开发之前,首先需要设置好Google授权认证。访问Google API Console并使用您的Google账户登录。创建一个项目并启用Google Adsense API。

然后,配置您的OAuth2认证。从左侧面板选择“凭据”选项。点击“创建凭据”,选择“OAuth客户端ID”为凭据类型。单击“创建凭据”按钮后,填写必要的信息即可完成设置。在这些信息包括:

  • 应用程序类型:Web应用程序
  • 授权JavaScript来源:http://localhost:8000
  • 受信任的重定向URI:http://localhost:8000/oauth/callback

记录下客户端ID和客户端密钥,稍后将用于在应用程序中进行授权。

3.安装必要的Python包

使用pip安装以下Python包(同样也可在PyPI上查找):

pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client Django

4.创建Django应用

创建Django项目和应用程序,并在“settings.py”文件中设置应用程序密钥和其他必要的设置:

# settings.py
from os import environ

# Google Adsense API
ADS_CLIENT_ID = environ.get('ADS_CLIENT_ID')
ADS_CLIENT_SECRET = environ.get('ADS_CLIENT_SECRET')
ADS_REDIRECT_URI = 'http://localhost:8000/oauth/callback'
ADS_USER_AGENT = 'google-api-python-client/1.7.11 Python/3.7.3'

# Django settings
DEBUG = True
SECRET_KEY = 'your-secret-key-here'
ALLOWED_HOSTS = ['localhost', '127.0.0.1']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'ads.apps.AdsConfig',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'db.sqlite3',
    }
}

STATIC_URL = '/static/'

接下来,创建应用程序:

python manage.py startapp ads

并在“ads/apps.py”文件中添加应用程序名称:

# ads/apps.py
from django.apps import AppConfig

class AdsConfig(AppConfig):
    name = 'ads'

5.在Django中实现OAuth2身份验证

在“ads/views.py”中使用Google OAuth2进行身份验证:

from django.shortcuts import redirect, render
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import Flow

def index(request):
    if 'credentials' not in request.session:
        flow = Flow.from_client_config(
            client_id=settings.ADS_CLIENT_ID,
            client_secret=settings.ADS_CLIENT_SECRET,
            scope=['https://www.googleapis.com/auth/adsense.readonly'],
            redirect_uri=settings.ADS_REDIRECT_URI)
        auth_url, state = flow.authorization_url(
            access_type='offline', include_granted_scopes='true')
        request.session['oauth2_state'] = state
        return redirect(auth_url)
    else:
        credentials = Credentials.from_authorized_user_info(
            request.session['credentials'])
        return render(request, 'index.html')

接下来,在重定向URI上创建回调视图以便于接收OAuth2授权码:

def oauth_callback(request):
    try:
        state = request.session['oauth2_state']
    except KeyError:
        return redirect('index')
    flow = Flow.from_client_config(
        client_id=settings.ADS_CLIENT_ID,
        client_secret=settings.ADS_CLIENT_SECRET,
        scope=['https://www.googleapis.com/auth/adsense.readonly'],
        state=state,
        redirect_uri=settings.ADS_REDIRECT_URI)
    flow.fetch_token(authorization_response=request.get_full_path())
    request.session['credentials'] = flow.credentials.to_json()
    return redirect('index')

6.使用Google Adsense API

使用以下代码从Google Adsense API中检索报告数据:

from django.conf import settings
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

def get_report_data(request):
    credentials = Credentials.from_authorized_user_info(
        request.session['credentials'])
    svc = build('adsense', 'v1.4', credentials=credentials, user_agent=settings.ADS_USER_AGENT)
    results = svc.accounts().reports().generate(
        accountId=request.GET.get('account_id'),
        currency=request.GET.get('currency'),
        date_range='custom',
        dimension=['DATE'],
        metric=['EARNINGS', 'CLICKS'],
        start_date=request.GET.get('start_date'),
        end_date=request.GET.get('end_date')).execute()
    return results

示例

以下是通过Django应用程序使用Google Adsense API的两个示例:

示例1:从用户的所有Adsense账户中汇总并列出数据

def report(request):
    accounts = []
    results = {}
    credentials = Credentials.from_authorized_user_info(
        request.session['credentials'])
    svc = build('adsense', 'v1.4', credentials=credentials, user_agent=settings.ADS_USER_AGENT)
    accounts_list = svc.accounts().list().execute()
    for account in accounts_list['items']:
        accounts.append({
            'id': account['id'],
            'name': account['name'],
        })
        r = svc.accounts().reports().generate(
            accountId=account['id'],
            currency='USD',
            date_range='custom',
            dimension=['DATE'],
            metric=['EARNINGS', 'CLICKS'],
            start_date=request.GET.get('start_date'),
            end_date=request.GET.get('end_date')).execute()
        for row in r['rows']:
            date = row['cells'][0]['value']
            earnings = float(row['cells'][1]['value'])
            clicks = int(row['cells'][2]['value'])
            if date not in results:
                results[date] = {
                    'clicks': clicks,
                    'earnings': earnings,
                }
            else:
                results[date]['clicks'] += clicks
                results[date]['earnings'] += earnings
    return render(request, 'report.html', {
        'accounts': accounts,
        'results': sorted(results.items()),
    })

示例2:列出已选择账户的数据

def account_report(request):
    data = get_report_data(request)
    rows = []
    for row in data['rows']:
        date = row['cells'][0]['value']
        earnings = float(row['cells'][1]['value'])
        clicks = int(row['cells'][2]['value'])
        rows.append({
            'date': date,
            'earnings': earnings,
            'clicks': clicks,
        })
    return render(request, 'account_report.html', {
        'rows': rows,
    })

这些示例仅是使用Google Adsense API的几个可能性之一。可以使用Django框架构建更多更复杂的应用程序来呈现详细的报表和数据视图。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python的Django框架编写从Google Adsense中获得报表的应用 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • SmartChart配合Django的安装与使用

    SmartChart的Git地址:https://gitee.com/smartchart/smartchart 在这里我只能说一句话 SmartChart开发团队真厉害 配合Django来使用SmartChart 安装smartchart,Python版本>=3.6,Django>=2.0SmartChart和我们的admin是有关联的,我们可…

    Django 2023年4月12日
    00
  • uwsgi运行django应用是报错no app loaded. going in full dynamic mode

    今天测试uwsgi运行uwsgi.ini的时候,报错: 网上搜了一天,大都不知原因,还是google吧:github问题解决 说说问题原因吧:根据uwsgi的提示,应该是wsgi.py的application导入问题导致,根据报错,可以尝试用python 导入试试 python -c “from app.wsgi import application” 显然…

    Django 2023年4月13日
    00
  • Django使用jinja2模板的实现

    实现在Django中使用jinja2模板,需要以下步骤: 第一步:安装jinja2 在命令行输入以下命令,安装jinja2: pip install jinja2 第二步:配置Django项目 在Django项目的settings.py文件中,添加以下配置信息: TEMPLATES = [ { ‘BACKEND’: ‘django.template.back…

    Django 2023年5月16日
    00
  • Django – 权限(2)- 动态显示单级权限菜单

    一、权限组件 1、上篇随笔中,我们只是设计好了权限控制的表结构,有三个模型,五张表,两个多对多关系,并且简单实现了对用户的权限控制,我们会发现那样写有一个问题,就是权限控制写死在了项目中,并且没有实现与我们的业务逻辑解耦,当其他项目要使用权限控制时,要再重复写一遍权限控制的代码,因此我们很有必要将权限控制的功能开发成一个组件(可插拔)。   组件其实就是一个…

    Django 2023年4月10日
    00
  • Python Django教程之实现新闻应用程序

    下面是关于“Python Django教程之实现新闻应用程序”的完整攻略。 1. 安装Python和Django 首先需要安装Python和Django,下面是具体步骤: 安装Python 在Python官网下载对应操作系统的安装包,安装完成后在命令行中输入python –version,如果能够正确显示Python版本号,则说明安装成功。 安装Djang…

    Django 2023年5月16日
    00
  • django drf框架自带的路由及最简化的视图

    针对该话题,我介绍一下关于Django DRF框架自带的路由和最简化的视图的完整攻略。 一、Django DRF框架自带的路由 在Django DRF框架中,提供了多种路由匹配方法,其中最常用的是DRF自带的路由匹配器。 首先,需要导入include和default-router两个路由相关的模块: from django.urls import path,…

    Django 2023年5月16日
    00
  • Django显示图片

    使用django实现网页的时候,想要在网页上显示图片是一件比较麻烦的事情。标准的html语言显示图片的方法在这里行不通,需要在配置文件中稍作修改。 那么我们可以非常自然想到,网页上的图片的来源方式有两种。1种是静态图片,即在写网页的时候就确定好页面上要放那一张图片。1种是动态图片,如从数据库中的查询得到的图片。这两种显示图片的方式稍有不同,以下分两个部分进行…

    Django 2023年4月12日
    00
  • django的ORM操作 增加和查询

    好的!下面是关于Django ORM的增加和查询操作的详细攻略及两个示例: 增加数据 在Django中使用ORM增加数据很简单,只需要三个步骤: 创建模型实例 将需要保存的数据赋值给模型实例的属性 调用模型实例的save()方法保存数据 示例1:我们现在要实现一个功能,就是在网站中添加一篇文章。假设我们的模型如下: class Article(models.…

    Django 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部