Как создать сценарий GOOGLE API для извлечения данных по часам? - PullRequest
0 голосов
/ 30 октября 2019

По сути, я хочу запускать этот сценарий каждый час, чтобы получить данные только за последний час, а затем сценарий снова запустится через час. Я хочу, чтобы этот сценарий извлекал все данные, связанные с этим последним часом, и далее для каждого часа дня. Как мне это сделать, поскольку я вижу только фильтр, который может это сделать, но я прочитал, что он будет только извлекать образец, а затем фильтровать по часу из этого образца.

   def get_report(analytics):

       return analytics.reports().batchGet(
          body={
              'reportRequests': [
               {
               '    viewId': VIEW_ID,
                       'dateRanges': [{'startDate': 
                                      '1dayAgo','endDate':'today'}],
     'metrics': [{'expression': 'ga:uniquepageviews'},
                    {'expression': 'ga:timeonpage'},
                    {'expression': 'ga:entrances'},
                    {'expression': 'ga:exits'},
                    {"expression": "ga:pageviews"}
                    ],
      'dimensions': [{'name': 'ga:dimension97'},
                    {'name': 'ga:dimension69'},
                    {'name': 'ga:dateHourMinute'},
                    ]

                   }]
            }
        ).execute()

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Поскольку вы сказали «запускайте этот скрипт каждый час», cronjob - ваш лучший шанс. Это просто. И вам не нужно связываться с логикой, отвечающей за взаимодействие с Google.

По сути, вы определяете расписание, используя выражение cron, и указываете путь к вашему сценарию, cron daemon (crond) выполняет сценарий в соответствии срасписание.

Это пример записи cronjob:

# in terminal, type crontab -e. assume current user has enough permissions(read,write,execute file etc) to do the things they want.
5 * * * * python google_analytics.py

Это означает, что на 5-й минуте каждый час демон cron будет выполнять команду: python google_analytics.py

Thisбудет вашим новым другом: https://crontab.guru/

В Windows это называется запланированным заданием, но идея та же.

1 голос
/ 30 октября 2019

Python имеет модуль sched. Можно сохранить следующий код в файле и затем выполнить его.

Существуют варианты для поддержания работы скрипта: окно терминала, сеанс tmux, фоновый процесс и т. Д.

Я использовалмного использовать cron, но перешел на использование модуля Python sched. Это может быть проще для устранения неполадок.

Сохраните этот код в файл. выполнить chmod 755 <myfile.py> Затем запустить скрипт: ./myfile.py

#!/usr/bin/env python

import sched
import time
from datetime import datetime, timedelta

# Create a scheduler instance.
scheduler = sched.scheduler(timefunc=time.time)

def reschedule(interval: dict=None):
    """Define how often the action function will run.
    Pass a dict interval {'hours': 1} to make it run every hour.
    """
    interval = {'minutes': 1} if interval is None else interval
    # Get the current time and remove the seconds and microseconds.
    now = datetime.now().replace(second=0, microsecond=0)
    # Add the time interval to now
    target = now + timedelta(**interval)
    # Schedule the task
    scheduler.enterabs(target.timestamp(), priority=0, action=get_report)

def get_report(analytics=None):
    # replace the print call with the code execute the Google API call
    print(time.ctime())

    reschedule() # Reschedule so it runs again.

if __name__ == "__main__":
    reschedule() # start

    try:
        scheduler.run(blocking=True)
    except KeyboardInterrupt:
        print('Stopped.')

ВЫХОД:

Tue Oct 29 22:35:00 2019
Tue Oct 29 22:36:00 2019
Stopped.

...