From f1a5bfa6f6d74173b9a4a66f4892172b8b639c5e Mon Sep 17 00:00:00 2001 From: priya-mane Date: Mon, 26 Oct 2020 23:07:35 +0530 Subject: [PATCH] added Google-spreadsheet-share-and-retrieve script --- .../README.md | 86 ++++++++++++++++++ .../create_sheet.py | 75 +++++++++++++++ .../credentials.json | 12 +++ .../get_sheet.py | 44 +++++++++ .../outputs/gmail-noti.JPG | Bin 0 -> 53667 bytes .../outputs/google-sheets-credentials.JPG | Bin 0 -> 54530 bytes .../requirement.txt | 4 + .../sample.csv | 4 + .../sample.json | 35 +++++++ 9 files changed, 260 insertions(+) create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/README.md create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/create_sheet.py create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/credentials.json create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/get_sheet.py create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/outputs/gmail-noti.JPG create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/outputs/google-sheets-credentials.JPG create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/requirement.txt create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/sample.csv create mode 100644 Scripts/API/Google-spreadsheet-share-and-retrieve/sample.json diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/README.md b/Scripts/API/Google-spreadsheet-share-and-retrieve/README.md new file mode 100644 index 000000000..732e3b6f1 --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/README.md @@ -0,0 +1,86 @@ +# Google Spreadsheet share and retrieve. + +This script helps the user to upload a local csv file to google drive and share it with the user specified in the command. + +The script also helps to retrieve the spreadsheet form the drive and store it locally in json format. + +*** + +### Prerequisites +``` +pip install -r requirements.txt +``` + +*** + +### How to run the script + +1. #### Create Google Sheets API credentials. + + a. Go to [Google Developer's Console](https://console.developers.google.com/apis/dashboard?project=trans-crawler-261018). + + b. Go to 'Library' from the left navigation panel. + + c. In the search bar type 'Google Sheets API'. + + d. Enable the API if not enabled or click on the manage button. + + e. Similarly enable the 'Google Drive API'. + + f. On the API page, goto 'Credentials' from the Navigation Panel. + + g. Click on 'Create Credentials', select the service account option and name the service account. + + h. Click on 'Add key' and 'Create New'. + + ![Google-sheets-api](outputs/google-sheets-credentials.JPG) + + i. File download will begin, rename this file as 'credentials.json' and place in the same folder as the scripts. + +2. #### Run the Scripts. + + * Share a spreadsheet + + ``` + python create_sheet.py -mail -csv -s + ``` + + * Retrieve the spreadsheet and store locally in json format + + ``` + python get_sheet.py -j -s + ``` + +*** + +### Screenshot showing the sample use of the script + +1. Creating a google spreadsheet and sharing it with the receiver. + + ``` + python create_sheet.py -mail -csv sample.csv -s my_sample_spreadsheet + ``` + + The receiver will receive a mail like this. + + ![successfully-shared](outputs/gmail-noti.JPG) + +2. Retrieving a created spreadhsheet. + + ``` + python get_sheet.py -j sample.json -s my_sample_spreadsheet + ``` + + Check the sample.json for observing the output file generated. + +*** +### Caveats + +* Since this is a free access version for the Google Spreadsheet API, keep the size of the csv file low. + +* If you get an error such as 'resource limit exhausted', simply create a new key as mention in the step 1.h in the 'How to run the script section'. and replace your old credentials.json file with this new one. + +*** + +## Author Name +Priya Mane \ No newline at end of file diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/create_sheet.py b/Scripts/API/Google-spreadsheet-share-and-retrieve/create_sheet.py new file mode 100644 index 000000000..b35576aa6 --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/create_sheet.py @@ -0,0 +1,75 @@ +import gspread +from oauth2client.service_account import ServiceAccountCredentials +import pandas as pd +import argparse + + +def auth_user(): + # Define a authorized user with the credentials created. + scope = ['https://www.googleapis.com/auth/spreadsheets', + 'https://www.googleapis.com/auth/drive'] + + credentials = ServiceAccountCredentials.from_json_keyfile_name( + 'credentials.json', scope) + + client = gspread.authorize(credentials) + return client + + +def create_and_share_sheet(user_mail, spreadsheet_name, csv_file): + client = auth_user() + sh = client.create(spreadsheet_name) + worksheet = sh.worksheet("Sheet1") + + # Read from the csv file mentioned in the command. + df = pd.read_csv(csv_file) + col = df.columns + # Define the column headings based on the our csv file. + end = ord('A') + len(col) - 1 + cell_range = 'A1:' + chr(end) + '1' + + # Define cells + cell_list = worksheet.range(cell_range) + i = 0 + for cell in cell_list: + cell.value = col[i] + i += 1 + + # Write these column headings to the worksheet + worksheet.update_cells(cell_list) + + # Convert rest of the dataframe to numpy object. (Use pandas version 1.0.3 strictly for this to work!) + df = df.to_numpy().tolist() + + # Write data from numpy object to the worksheet + for i in range(2, len(df) + 2): + pos = 'A' + str(i) + ':' + chr(end) + str(i) + cell_list = worksheet.range(pos) + val = df[i-2] + j = 0 + for cell in cell_list: + cell.value = val[j] + j += 1 + worksheet.update_cells(cell_list) + + # Share the created spreadsheet with the receiver. + sh.share(user_mail, perm_type='user', role='writer') + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="generate and share google sheet for give csv") + parser.add_argument("-mail", help="Enter the email id of the community admin", + dest="mail_id", type=str, required=True) + parser.add_argument("-csv", help="Enter path of csv file", + dest="csv", type=str, required=True) + parser.add_argument("-spreadsheet_name", help="Enter name of spreadsheet", + dest="ss_name", type=str, required=True) + + args = parser.parse_args() + + community_admin = args.mail_id + csv_file = args.csv + spreadsheet_name = args.ss_name + + create_and_share_sheet(community_admin, spreadsheet_name, csv_file) diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/credentials.json b/Scripts/API/Google-spreadsheet-share-and-retrieve/credentials.json new file mode 100644 index 000000000..d055314b1 --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/credentials.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "trans-crawler-261018", + "private_key_id": , + "private_key": "", + "client_email": "", + "client_id": "", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "" +} diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/get_sheet.py b/Scripts/API/Google-spreadsheet-share-and-retrieve/get_sheet.py new file mode 100644 index 000000000..7e4892e60 --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/get_sheet.py @@ -0,0 +1,44 @@ +import gspread +from oauth2client.service_account import ServiceAccountCredentials +import pandas as pd +import argparse +import json + + +def auth_user(): + # Define a authorized user with the credentials created. + scope = ['https://www.googleapis.com/auth/spreadsheets', + 'https://www.googleapis.com/auth/drive'] + + credentials = ServiceAccountCredentials.from_json_keyfile_name( + 'credentials.json', scope) + + client = gspread.authorize(credentials) + return client + + +def get_sheet_json(spreadsheet_name, json_file): + # Retrieve spreadsheet by name from the user's google drive. + client = auth_user() + sheet = client.open(spreadsheet_name).sheet1 + data = sheet.get_all_records() + + # Dump the retrieved csv file in json format. + with open(json_file, 'w') as fout: + json.dump(data, fout, indent=4) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="get data from spreadsheet in json format") + parser.add_argument("-json", help="Enter path of json file", + dest="json", type=str, required=True) + parser.add_argument("-spreadsheet_name", help="Enter name of spreadsheet", + dest="ss_name", type=str, required=True) + + args = parser.parse_args() + + spreadsheet_name = args.ss_name + json_file = args.json + + get_sheet_json(spreadsheet_name, json_file) diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/outputs/gmail-noti.JPG b/Scripts/API/Google-spreadsheet-share-and-retrieve/outputs/gmail-noti.JPG new file mode 100644 index 0000000000000000000000000000000000000000..7ab94ac223177a52b77d826d3c30a4ccc98c3b74 GIT binary patch literal 53667 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 literal 0 HcmV?d00001 diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/outputs/google-sheets-credentials.JPG b/Scripts/API/Google-spreadsheet-share-and-retrieve/outputs/google-sheets-credentials.JPG new file mode 100644 index 0000000000000000000000000000000000000000..474ba34949611661c2b582e740ffa3e5ea203e66 GIT binary patch literal 54530 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 literal 0 HcmV?d00001 diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/requirement.txt b/Scripts/API/Google-spreadsheet-share-and-retrieve/requirement.txt new file mode 100644 index 000000000..bdf9c6fa3 --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/requirement.txt @@ -0,0 +1,4 @@ +gspread==3.6.0 +oauth2client==4.1.3 +pandas==1.0.3 +argparse \ No newline at end of file diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/sample.csv b/Scripts/API/Google-spreadsheet-share-and-retrieve/sample.csv new file mode 100644 index 000000000..e02c57d9c --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/sample.csv @@ -0,0 +1,4 @@ +name,ingredients,diet,prep_time,cook_time,flavor_profile,course,state,region +Balu shahi,"Maida flour, yogurt, oil, sugar",vegetarian,45,25,sweet,dessert,West Bengal,East +Boondi,"Gram flour, ghee, sugar",vegetarian,80,30,sweet,dessert,Rajasthan,West +Gajar ka halwa,"Carrots, milk, sugar, ghee, cashews, raisins",vegetarian,15,60,sweet,dessert,Punjab,North diff --git a/Scripts/API/Google-spreadsheet-share-and-retrieve/sample.json b/Scripts/API/Google-spreadsheet-share-and-retrieve/sample.json new file mode 100644 index 000000000..2aefa252b --- /dev/null +++ b/Scripts/API/Google-spreadsheet-share-and-retrieve/sample.json @@ -0,0 +1,35 @@ +[ + { + "name": "Balu shahi", + "ingredients": "Maida flour, yogurt, oil, sugar", + "diet": "vegetarian", + "prep_time": 45, + "cook_time": 25, + "flavor_profile": "sweet", + "course": "dessert", + "state": "West Bengal", + "region": "East" + }, + { + "name": "Boondi", + "ingredients": "Gram flour, ghee, sugar", + "diet": "vegetarian", + "prep_time": 80, + "cook_time": 30, + "flavor_profile": "sweet", + "course": "dessert", + "state": "Rajasthan", + "region": "West" + }, + { + "name": "Gajar ka halwa", + "ingredients": "Carrots, milk, sugar, ghee, cashews, raisins", + "diet": "vegetarian", + "prep_time": 15, + "cook_time": 60, + "flavor_profile": "sweet", + "course": "dessert", + "state": "Punjab", + "region": "North" + } +] \ No newline at end of file