Il enregistre une série d'étapes pour enregistrer les données du journal telles que l'activité des utilisateurs qui accumule des données quotidiennes ou des données d'enregistrement des utilisateurs (CSV) sur Google Drive sous la forme d'une feuille de calcul Google. En utilisant ce mémo, vous pouvez effectuer les opérations suivantes.
Et ainsi de suite, il n'y a qu'un mérite honnête. La cible de ce mémo est «les personnes qui veulent savoir comment automatiser le travail dans les plus brefs délais» et «les personnes qui ont essayé d'utiliser l'API Google mais qui sont frustrées par la littérature anglaise peu amicale». Après lecture, nous visons un état où ces personnes ** "comprennent en quelque sorte comment utiliser l'API Google" **.
_ ** * Ci-dessous, la discussion se poursuivra sur l'hypothèse qu'un environnement pouvant utiliser Ruby ou Python a été construit. ** _
OS
Tout d'abord, vous devez vous inscrire pour utiliser l'API Google. Veuillez exécuter selon le flux suivant.
client_secret.json
sous ~ / .credential /
.gitignore
et veillez à ne pas inclure la clé APIRuby
$ gem install google-api-client
Python
$ pip install --upgrade google-api-python-client
Créez le script suivant dans n'importe quel répertoire. De plus, veuillez noter que les tâches effectuées par la version Ruby et la version Python ci-dessous ne sont pas 100% identiques.
Ruby: uploader.rb
require 'google/apis/drive_v3'
require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'fileutils'
credentials_dir = File.join(Dir.home, '.credentials')
CLIENT_SECRETS_PATH = File.join(credentials_dir, 'client_secret.json')
CREDENTIALS_PATH = File.join(credentials_dir, 'sampleApp.yaml')
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
APPLICATION_NAME = 'sampleApp'
SCOPE = Google::Apis::DriveV3::AUTH_DRIVE
class DriveUploader
#Définissez le chemin d'accès au dossier contenant le fichier CSV que vous souhaitez télécharger
FILE_DIR = 'out/'
#Définissez l'ID du dossier sur Google Drive dans lequel vous souhaitez stocker le fichier
#Les détails sont résumés ci-dessous
FOLDER_ID = '<Your Folder ID>'
MASTER_FILE_ID = '<Your Master FIle ID>'
MASTER_FOLDER_ID = '<Your Master Folder ID>'
def initialize
#Générer une instance d'API
@@drive = Google::Apis::DriveV3
@@service = @@drive::DriveService.new
@@service.client_options.application_name = APPLICATION_NAME
@@service.authorization = authorize
end
def authorize
FileUtils.mkdir_p(File.dirname(CREDENTIALS_PATH))
client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH)
authorizer = Google::Auth::UserAuthorizer.new(client_id, SCOPE, token_store)
user_id = 'default'
credentials = authorizer.get_credentials(user_id)
if credentials.nil?
url = authorizer.get_authorization_url(base_url: OOB_URI)
puts "Open the following URL in the browser and enter the " +
"resulting code after authorization"
puts url
code = gets
credentials = authorizer.get_and_store_credentials_from_code(user_id: user_id, code: code, base_url: OOB_URI)
end
credentials
end
def upload_csvs
##
#Méthode pour télécharger un fichier
#Dans le dossier spécifié"~~.csv"Téléchargez tous les fichiers nommés
#Trouvez le fichier à télécharger
file_path = File.join(FILE_DIR, '*.csv')
files = Dir.glob(file_path)
abort('No files to upload.') if files.empty?
#Répétez la tâche de téléchargement pour tous les fichiers applicables
counter = 0
files.each.with_index(1) do |a_file, i|
#Nommez le fichier"MMDD_FileName"Convertir au format
file_name = Date.today.strftime('%m%d') + a_file.gsub(/out\/\d{4}-\d{2}-\d{2}/,'').gsub('.csv','')
puts "\nUploading[#{i}/#{files.count}]: #{file_name}"
#Définir où télécharger
file_metadata = @@drive::File.new(
name: file_name,
mime_type: 'application/vnd.google-apps.spreadsheet',
parents: [FOLDER_ID]
)
#Téléchargez le fichier converti dans le dossier spécifié sur Goodle Drive
file = @@service.create_file(file_metadata, upload_source: a_file, content_type: 'text/csv', fields: 'id')
file_id = file.id
puts "Successfully uploaded as:\nhttps://docs.google.com/spreadsheets/d/#{file_id}\n"
counter += 1
end
#Résultat de sortie
puts "\n\nTotal: #{counter.to_s} Files Uploaded\n"
end
def copy_master
##
#Copiez le fichier principal tel que les rapports quotidiens que vous souhaitez copier sur Google Drive en même temps que le téléversement
#Le fichier maître est déjà défini comme une constante au début
master_file_metadata = @@drive::File.new(
name: "#{Date.today.strftime('%m%d')}_Dashboard",
parents: [MASTER_FOLDER_ID]
)
master_file = @@service.copy_file(MASTER_FILE_ID, master_file_metadata)
puts "\nSuccessfully created as: #{master_file.name}\nhttps://docs.google.com/spreadsheets/d/#{master_file.id}"
end
end
#Ce script du terminal[./uploader.rb]Description à exécuter avec la commande
if __FILE__ == $0
puts "Start uploading reports to Drive..."
DriveUploader.new.upload_csvs
puts "Copying master file in Drive..."
DriveUploader.new.copy_master
end
Python: uploader.py
import httplib2
import os
import sys
import time
import glob
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
from apiclient.http import MediaFileUpload
CREDENTIAL_DIR = os.path.join(os.path.expanduser('~'), '.credentials')
CLIENT_SECRET_FILE = os.path.join(CREDENTIAL_DIR, 'client_secret.json')
CREDENTIAL_PATH = os.path.join(CREDENTIAL_DIR, 'piwikReport.json')
APPLICATION_NAME = 'piwikReport'
SCOPES = 'https://www.googleapis.com/auth/drive'
#Définissez le chemin d'accès au dossier qui stocke le fichier CSV que vous souhaitez télécharger
FILE_DIR = 'out/'
#Définissez l'ID du dossier sur Google Drive dans lequel vous souhaitez stocker le fichier
#Les détails sont résumés ci-dessous
FOLDER_ID = '<Your Folder ID>'
MASTER_FILE_ID = '<Your Master FIle ID>'
MASTER_FOLDER_ID = '<Your Master Folder ID>'
class DriveUploader(object):
def __init__(self):
"""
Authentifiez-vous à l'aide des informations d'identification que vous avez déjà téléchargées et enregistrées
"""
self.credentials = self.get_credentials()
self.http = self.credentials.authorize(httplib2.Http())
self.service = discovery.build('drive', 'v3', http=self.http)
def get_credentials(self):
"""
Vérifiez si l'authentification API est déjà terminée
"""
if not os.path.exists(CREDENTIAL_DIR):
os.makedirs(CREDENTIAL_DIR)
store = oauth2client.file.Storage(CREDENTIAL_PATH)
credentials = store.get()
if not credentials or credentials.invalid:
flags = tools.argparser.parse_args(args=[])
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else:
# Python2.Description pour les utilisateurs utilisant 6
credentials = tools.run(flow, store)
print('Storing credentials to' + CREDENTIAL_PATH)
return credentials
def upload_csvs(self):
"""
Méthode pour télécharger un fichier
Dans le dossier spécifié"~~.csv"Téléchargez tous les fichiers nommés
"""
#Rechercher des fichiers à télécharger
file_path = os.path.join(FILE_DIR, '*.csv')
files = glob.glob(file_path)
if not files:
print('No files to upload.')
sys.exit()
#Répétez la tâche de renommer et de télécharger tous les fichiers applicables
counter = 1
for a_file in files:
#Nommez le fichier"MMDD_FileName"Convertir au format
file_name = time.strftime('%m%d') + a_file.replace('out/','_').replace('.csv','')
print('>>>\nUploading[' + str(counter) + '/' + str(len(files)) + ']: ' + file_name)
#Confirmer la destination de téléchargement
file_metadata = {
'name' : file_name,
'mimeType' : 'application/vnd.google-apps.spreadsheet',
'parents' : [FOLDER_ID]
}
#Importez les données CSV converties au format de feuille de calcul dans le dossier Google Drive déjà défini
media = MediaFileUpload(a_file, mimetype='text/csv', resumable=True)
file = self.service.files().create(body=file_metadata, media_body=media, fields='id').execute()
file_id = file.get('id')
print('Successfully uploaded as:\nhttps://docs.google.com/spreadsheets/d/' + file_id)
counter += 1
#Résultat de sortie
print('--------------\nTotal: '+ str(counter - 1) + ' Files Uploaded')
def copy_master(self):
"""
Copiez le fichier principal tel que les rapports quotidiens que vous souhaitez copier sur Google Drive en même temps que le téléversement
Le fichier maître est déjà défini comme une constante au début
"""
master_file_metadata = {
'name' : (time.strftime('%m%d') + '_PiwikReport'),
'parents' : [MASTER_FOLDER_ID]
}
master_file = self.service.files().copy(fileId=MASTER_FILE_ID, body=master_file_metadata, fields='id, name').execute()
print('Successfully created as: ' + master_file.get('name') + '\nhttps://docs.google.com/spreadsheets/d/' + master_file.get('id'))
#Ce script du terminal[python3 uploader.py]Description à exécuter avec la commande
if __name__ == "__main__":
DriveUploader().copy_master()
Ensuite, je vais expliquer les constantes dans le code.
CREDENTIAL_DIR
CLIENT_SECRETS_PATH
CREDENTIALS_PATH
OOB_URI
--Informations requises pour l'authentification APIAPPLICATION_NAME
SCOPE
--Définir la plage à laquelle l'API peut accéder au compteFILE_DIR
FOLDER_ID
--ID du dossier dans lequel vous souhaitez télécharger des données CSV au format feuille de calcul
--ID est une liste de caractères alphanumériques à la fin de l'URL du dossier.
--Si l'URL du dossier est https: // drive.google.com / drive / u / 0 / folders / 7hu9HyWxhuga563WV2xxxxGd
, la dernière partie 7hu9HyWxhuga563WV2xxxxGd
MASTER_FILE_ID
https: // docs.google.com / spreadsheets / d / 1vm5eyjJpuXXXhogefjduaJGeoSQSjJfs2FBpiyoHige / edit
, la partie de` 1vm5eyjJpuXXXhogefjduaJGeoSQSyoSjJfs2FpiMASTER_FOLDER_ID
--ID du dossier que vous souhaitez conserver après la copie du fichier maître tel que le rapport quotidien
--ID est une liste de caractères alphanumériques à la fin de l'URL du dossier.
--Si l'URL du dossier est https: // drive.google.com / drive / u / 0 / folders / 7hu9HyWxhuga563WV2xxxxGd
, la dernière partie 7hu9HyWxhuga563WV2xxxxGd
Assurez-vous que vous vous trouvez dans le même répertoire que le script ci-dessus, puis exécutez la commande suivante.
Ruby
$ ruby uploader.rb
ou $. / uploader.rb
Python
$ python3 uploader.py
La première fois, un écran tel que "Voulez-vous vous authentifier?" Peut apparaître, mais vous pouvez tous les autoriser. Si cela vous tient vraiment à cœur, vous pourrez toujours le modifier ultérieurement dans les paramètres. Supprimez également le fichier CSV local dès que le téléchargement est terminé.
c'est tout. Ce mémo était l'article de stratégie le plus rapide à envoyer à ceux qui préconisent l'automatisation du travail et la conversion dans le cloud à l'aide de l'API Google. En premier lieu, quand j'étais analyste de données utilisateurs à l'étranger, j'étais obligé de le faire, et j'ai eu l'expérience de le faire tout en devenant un héros devant des documents anglais et hostiles. Si vous maîtrisez l'anglais, vous pouvez visiter les sites de référence listés ci-dessous. J'espère que beaucoup de gens qui sont obligés de faire un travail inefficace et improductif dans le monde seront heureux grâce à cet article.
Ruby
Python
Recommended Posts