【问题标题】:What could be a problem when running a Python script?运行 Python 脚本时可能会出现什么问题?
【发布时间】:2019-06-11 07:53:46
【问题描述】:

在我开始的python中,我在使用示例脚本时遇到了问题,但是,即使在调用脚本时使用参数,操作也存在问题。 我不会说这个脚本解决了我的很多问题,而无需为数据写入提供服务。 而且我不会说运行它会有用:)

我一直在争论,没有任何方式

import httplib2
import os
import sys
import csv

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
import argparse
from oauth2client.tools import argparser, run_flow


library/python/guide/aaa_client_secrets
CLIENT_SECRETS_FILE = "client_secret.json"

YOUTUBE_SCOPES = ["https://www.googleapis.com/auth/youtube.readonly",
  "https://www.googleapis.com/auth/yt-analytics.readonly"]
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
YOUTUBE_ANALYTICS_API_SERVICE_NAME = "youtubeAnalytics"
YOUTUBE_ANALYTICS_API_VERSION = "v1"

MISSING_CLIENT_SECRETS_MESSAGE = """
WARNING: Please configure OAuth 2.0

To make this sample run you will need to populate the client_secrets.json file
found at:

   %s

with information from the Developers Console
https://console.developers.google.com/

For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__),
                                   CLIENT_SECRETS_FILE))


def get_authenticated_services(args):
  flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
    scope=" ".join(YOUTUBE_SCOPES),
    message=MISSING_CLIENT_SECRETS_MESSAGE)

  storage = Storage("%s-oauth2.json" % sys.argv[0])
  credentials = storage.get()

  if credentials is None or credentials.invalid:
    credentials = run_flow(flow, storage, args)

  http = credentials.authorize(httplib2.Http())

  youtube_analytics = build(YOUTUBE_ANALYTICS_API_SERVICE_NAME,
    YOUTUBE_ANALYTICS_API_VERSION, http=http)

  return youtube_analytics

def run_analytics_report(youtube_analytics, options, count):
  # Call the Analytics API to retrieve a report. For a list of available
  # reports, see:
  # https://developers.google.com/youtube/analytics/v1/channel_reports
  analytics_query_response = youtube_analytics.reports().query(
    ids="channel==%s" % options.channel_id,
    metrics=options.metrics,
    dimensions=options.dimensions,
    filters=options.filters,
    start_date=options.start_date,
    end_date=options.end_date,
    #max_results=options.max_results,
    sort=options.sort
  ).execute()

  print "Analytics Data for Channel %s" % options.channel_id

  if count == 0:
    with open('results.csv', 'w') as csv_out:
           csvWriter=csv.writer(csv_out, delimiter=',', lineterminator = '\n')
           headers = [ch["name"] for ch in analytics_query_response.get("columnHeaders", [])]
           headers.append("country")
           csvWriter.writerow(headers)

  else:
    with open('results.csv', 'a') as csv_out:
      csvWriter=csv.writer(csv_out, delimiter=',', lineterminator = '\n')
      for row in analytics_query_response.get("rows", []):
        values = []
        for value in row:
          values.append(str(value))
        values.append((options.filters[9]+""+options.filters[10]))
        csvWriter.writerow(values)

  print "Results exported to csv"


if __name__ == "__main__":
  count = 0
  now = datetime.now()
  one_day_ago = (now - timedelta(days=1)).strftime("%Y-%m-%d")
  one_week_ago = (now - timedelta(days=7)).strftime("%Y-%m-%d")
  f = open('countries.csv', 'rb')
  reader = csv.reader(f)

  for row in reader:
    argparser = argparse.ArgumentParser()
    argparser.add_argument("--channel-id", help="Channel ID",
      default="UCJ5v_MCY6GNUBTO8-D3XoAg")
    argparser.add_argument("--metrics", help="Report metrics",
      default="views,estimatedMinutesWatched")
    argparser.add_argument("--dimensions", help="Report dimensions",
      default="deviceType")
    argparser.add_argument("--filters", help="Report filters",
      default="country==" + ''.join(row))
    argparser.add_argument("--start-date", default=one_week_ago,
      help="Start date, in YYYY-MM-DD format")
    argparser.add_argument("--end-date", default=one_day_ago,
      help="End date, in YYYY-MM-DD format")
    #argparser.add_argument("--max-results", help="Max results", default=10)
    argparser.add_argument("--sort", help="Sort order", default="-views")
    args = argparser.parse_args()

    youtube_analytics = get_authenticated_services(args)
    try:
      run_analytics_report(youtube_analytics, args, count)
      count = count + 1
    except HttpError, e:
      print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)

我不知道,我的问题是嚎叫。

运行脚本时,即使给出参数也会显示以下消息?

文件“yt-mario.py”,第 91 行 打印“通道 %s 的分析数据”% options.channel_id ^ SyntaxError:调用“打印”时缺少括号。您是说 print("Analytics Data for Channel %s" % options.channel_id)?

【问题讨论】:

  • 你有什么问题?
  • 简要描述您尝试过的内容?你如何运行这个脚本?参数是什么?显示一些输出痕迹以帮助人们理解问题。
  • 该脚本在 Python 2 中
  • Print 给出了一个语法错误,这可能表明您使用 python3 运行它,但它是 python 2 代码
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、可重现的示例。

标签: python youtube-api youtube-analytics-api


【解决方案1】:
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Analytics Data for Channel %s" % options.channel_id)?

这段代码可能是Python2.7,这里的print语句不需要加括号。

尝试使用 Python 2.7 运行它。

【讨论】:

  • 谢谢,我会检查它是否有效,我有版本 3.7.3
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 2020-03-20
  • 2015-09-12
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
相关资源
最近更新 更多