适用于python输出数据文件的GCP云功能

时间:2020-01-21 01:15:19

标签: python google-cloud-platform google-cloud-functions tweepy twitterapi-python

我对GCP还是很陌生,不确定是否要使用Cloud Functions。

  1. 我有一个Python脚本,该脚本使用tweepy调用twitter api,并生成带有该特定用户名的推文列表的csv文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tweepy
import datetime
import csv

def fetchTweets(username):
  # credentials from https://apps.twitter.com/
  consumerKey = "" # hidden for security reasons
  consumerSecret = "" # hidden for security reasons
  accessToken = "" # hidden for security reasons
  accessTokenSecret = "" # hidden for security reasons

  auth = tweepy.OAuthHandler(consumerKey, consumerSecret)
  auth.set_access_token(accessToken, accessTokenSecret)

  api = tweepy.API(auth)

  startDate = datetime.datetime(2019, 1, 1, 0, 0, 0)
  endDate =   datetime.datetime.now()
  print (endDate)

  tweets = []
  tmpTweets = api.user_timeline(username)

  for tweet in tmpTweets:
      if tweet.created_at < endDate and tweet.created_at > startDate:
          tweets.append(tweet)

  lastid = ""
  while (tmpTweets[-1].created_at > startDate and tmpTweets[-1].id != lastid):
      print("Last Tweet @", tmpTweets[-1].created_at, " - fetching some more")
      lastid = tmpTweets[-1].id
      tmpTweets = api.user_timeline(username, max_id = tmpTweets[-1].id)
      for tweet in tmpTweets:
          if tweet.created_at < endDate and tweet.created_at > startDate:
              tweets.append(tweet)

  # # for CSV

  #transform the tweepy tweets into a 2D array that will populate the csv   
  outtweets = [[tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")] for tweet in tweets]

  #write the csv    
  with open('%s_tweets.csv' % username, 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(["id","created","text"])
    writer.writerows(outtweets)
  pass

  f = open('%s_tweets.csv' % username, "r")
  contents = f.read()
  return contents

fetchTweets('usernameofusertoretrieve') # this will be set manually in production
  1. 我想运行此脚本并通过http请求(例如,csv文件或return contents)检索结果。使用javascript。该脚本只需要每天运行一次。但是生成的数据(csv)应该可以按要求提供。

因此,我的问题是

a。 GCP Cloud Functions是适合该工作的工具吗?还是这需要更广泛的内容,因此是否需要GCP VM实例?

b。要使其在GCP上运行,需要对代码进行哪些更改?

也欢迎您提供有关方向的帮助/建议。

1 个答案:

答案 0 :(得分:2)

没有更多细节,您的问题很难回答。但是,我将尝试提供一些见识

GCP Cloud Functions是正确的工作工具吗?还是这需要更广泛的内容,因此是否需要GCP VM实例?

这取决于。 1个CPU的处理时间是否少于9分钟?并且您的进程是否需要少于2Gb的内存(应用程序内存占用量+文件大小+ tweets数组大小)?

为什么文件大小?因为只有/tmp目录是可写的,并且它是内存中的文件系统。

如果您最多需要15分钟的超时时间,可以查看Cloud Run,与Cloud Function和I personally prefer非常相似。 Cloud Function和Cloud Run在CPU和内存上的限制是相同的(但是随着CPU和内存的增加,它在2020年应该会改变)

要使其在GCP上运行,需要对代码进行哪些更改?

首先从/tmp目录进行读写操作。最后,如果您希望文件全天可用,请将其存储在Cloud Storage(https://cloud.google.com/storage/docs)中,并在函数开始时进行检索。如果不存在,则为当天生成,否则获取现有的一天。

然后,将功能def fetchTweets(username):的签名替换为def fetchTweets(request):,并在请求参数中获取用户名

最终,如果您每天想要一代人,请设置一个Cloud Scheduler


您没有谈论安全性。我建议您在private mode

中部署功能

因此,此答案中有很多GCP无服务器概念,我不知道您对GCP的了解。如果您想要某些零件的精度,请随时询问!