Skip to content

Instantly share code, notes, and snippets.

@TheMuellenator
Forked from angelabauer/main.py
Created February 2, 2021 17:26
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save TheMuellenator/974c39779ec516c4c60e918c001e48ba to your computer and use it in GitHub Desktop.
Save TheMuellenator/974c39779ec516c4c60e918c001e48ba to your computer and use it in GitHub Desktop.
#No Authentication
sheet_response = requests.post(sheet_endpoint, json=sheet_inputs)
#Basic Authentication
sheet_response = requests.post(
sheet_endpoint,
json=sheet_inputs,
auth=(
YOUR USERNAME,
YOUR PASSWORD,
)
)
#Bearer Token Authentication
bearer_headers = {
"Authorization": "Bearer YOUR_TOKEN"
}
sheet_response = requests.post(
sheet_endpoint,
json=sheet_inputs,
headers=bearer_headers
)
@Chuks-Chuks
Copy link

Getting same error - "detail": "Cannot read property '0' of undefined"

It's because you haven't entered the titles of the columns.

@Anuja-Dilshan
Copy link

I keep getting the error 500? Does anyone know why?

me too. I tried every possible way but nothing changes

@TuanNg915
Copy link

Guys,
Try this solution, it worked for me
step 1:
add username and password and click save change at sheety
step 2:
SHEETY_HEADER = {
"Authorization": including Basic and =, example : Basic 4356ergdfg3453456=
"username": username that you save before
"password": password that you save before
}

@NiRo-jr
Copy link

NiRo-jr commented Feb 20, 2023

For error: "The caller does not have permission"

Check the file in Google Drive, is in read only mode.
I solve this problem only after delete the sheet and make new one with same filename and same column head.
If you chose to do the same, make sure you update the info in sheety --> Setting-->Spreadsheet

@y28s7
Copy link

y28s7 commented Feb 28, 2023

the next wored for me too:

headers_sheety = { "Authorization": MY AUTHORIZATION HEADER, }

sheety_response = requests.post(url=ENDPOINT, json=new_workout_data, headers=headers_sheety) print(sheety_response.text)

image_2021-07-27_022158

yes, that worked for me as well.

@WealthE-776
Copy link

Still errors coming someone help me fix it

Tell me which exercises you did: Cycled 45km { "errors": [ { "detail": "Cannot read property 'projects' of null" } ] }

pls can any one help with this problem

@y28s7
Copy link

y28s7 commented Mar 21, 2023

Still errors coming someone help me fix it
Tell me which exercises you did: Cycled 45km { "errors": [ { "detail": "Cannot read property 'projects' of null" } ] }

pls can any one help with this problem

please list your code

@SimantiniN
Copy link

I wrote a code mentioned below and will work..try this

USERNAME =your username that you save before
PASSWORD =your password hat you save before

authorization_header = {
'Authorization': 'Basic your provided number '
}
response = requests.post(sheety_endpoint, json=sheety_request_body,auth=(USERNAME,PASSWORD),headers=authorization_header)

@MahalakahmiMallela
Copy link

image

@MahalakahmiMallela
Copy link

image

this is what getting an error

{'exercises': [{'tag_id': 317, 'user_input': 'running', 'duration_min': 31.08, 'met': 9.8, 'nf_calories': 390.88, 'photo': {'highres': 'https://d2xdmhkmkbyw75.cloudfront.net/exercise/317_highres.jpg', 'thumb': 'https://d2xdmhkmkbyw75.cloudfront.net/exercise/317_thumb.jpg', 'is_user_uploaded': False}, 'compendium_code': 12050, 'name': 'running', 'description': None, 'benefits': None}]}
{'errors': [{'detail': "Bad Request. The JSON payload should be inside a root property called 'sheet1'. Check https://sheety.co/docs for more details."}]}

@agaSzajnert
Copy link

hi, in your endpoint your sheet has name "sheet1" not "workouts" so probably You should change name from "workouts" to "sheet1" in for loop,

@nipsalvin
Copy link

"detail": "POST has been disabled on this sheet."

I Keep on getting this error message when I try POST a workout.

@lakshita05
Copy link

nipsalvin
In sheety , go to your projects and click on your spreadsheet name , scroll down
you will find something like this...
POST Add a row to your sheet (enable it.)

@nipsalvin
Copy link

nipsalvin In sheety , go to your projects and click on your spreadsheet name , scroll down you will find something like this... POST Add a row to your sheet (enable it.)

I was able to sort it.
Thanks

@requiredcrx
Copy link

requiredcrx commented Jul 17, 2023

Actually, can't get it to work with the docs guide, just this repos works for me...

DIDN'T WORK

AuthEndpoint = "https://httpbin.org/basic-auth/user/pass"

basic = HTTPBasicAuth(username=MY_USERNAME, password=MY_PASSWORD)
auth_response = requests.get(url=AuthEndpoint, auth=basic)

WORKED

sheet_response = requests.post(url=SheetEndpoint, json=params, auth=(MY_USERNAME, MY_PASSWORD))
print(sheet_response.text)

@anuragz1989
Copy link

Hey guys try this. I'm sure this will work.

Before running your code, make sure to cross check the authentication method you are using.
If using the basic method make sure that you have selected the basic radio button on the Sheety website under Authentication and saved the changes.

Same for the bearer method. Then simply put the Authorization Header like this before posting the request . Here using the basic method:

basic_auth_headers = {
    "Authorization": "Basic TK51cmSnODk6a25zcmhkdTc2Z2R0dzU+"
}

for exercise in result["exercises"]:
    exercise_data = {
        "workout": {
            "date": date_today,
            "time": time_now,
            "exercise": exercise["name"].title(),
            "duration": exercise["duration_min"],
            "calories": exercise["nf_calories"],
        }
    }

sheet_response = requests.post(
        url=sheet_endpoint,
        json=exercise_data,
        headers=basic_auth_headers
    )

@Dinesh-0239
Copy link

Dinesh-0239 commented Jul 22, 2023

#----------------------------- CODE ---------------------------------------------------------------#
APP_ID = "api Id"
API_KEY = "api key"
SHEETY_UNAME = "username"
PROJECT_NAME = "Exercise Tracker"
SHEET_NAME = "Exercise_tracker_worksheet"
GENDER = "Male"
WEIGHT = 45
AGE = 20
HEIGHT = 171
import requests
from datetime import datetime

exercise_endpoint = "https://trackapi.nutritionix.com/v2/natural/exercise"

sheet_endpoint = f"https://api.sheety.co/{SHEETY_UNAME}/{PROJECT_NAME}/{SHEET_NAME}"

exercise_text = input("Tell me which exercise you did: ")
headers = {
"x-app-id": APP_ID,
"x-app-key": API_KEY
}

exercise_params = {
"query": exercise_text,
"gender": GENDER,
"weight_kg": WEIGHT,
"height_cm": HEIGHT,
"age": AGE
}

response = requests.post(url=exercise_endpoint,headers=headers,json=exercise_params)
print(response.status_code)
result = response.json()

current_date = datetime.now().strftime("%d%m%Y")
current_time = datetime.now().strftime("%X")
print(current_time)

for exercise in result["exercises"]:
sheet_params = {
SHEET_NAME: {
"date": current_date,
"time": current_time,
"exercise": exercise["name"].title(),
"duration": exercise["duration_min"],
"calories": exercise["nf_calories"]
}
}

sheet_response = requests.post(url=sheet_endpoint,auth=("uname","password"),json=sheet_params)
print(sheet_response.status_code)
print(sheet_response.text)

#----------------------------- output --------------------------------------------------------------#
500
{
"errors": [
{
"detail": "Cannot read property 'projects' of null"
}
]
}
#----------------------------------------Problem---------------------------------------------------#

Anyone please help me to solve this problem🙏

My Whatsapp no :- 6387656066
Mail: dineshamrawatisingh@gmail.com

@sangram73
Copy link

did your using pycharm before you run please check sheet data with sheety your giving data make sure check spells also

@gaderz
Copy link

gaderz commented Jul 28, 2023

i have a problem those when i run my code i get this printed out and i have asked and was told it means the code ran successfully but when i check my sheet nothing was updated and my code has been running fine but has never been posting nothing

{
"sheet1": {
"id": 2
}
}

@Mumartayyab
Copy link

Screenshot 2022-08-10 135156 I have tried all the solutions but it still shows me: "detail": "The caller does not have permission" What can I do next anyone?

Where you able to figure this out? stuck with this message also

Just Create a new spreadsheet and link it with your project.The sheet you are using is in read only mode!

@Sir-AryanG-NTfV
Copy link

Sir-AryanG-NTfV commented Sep 28, 2023

How to remove this error:
{
"sheet1": {
"id": 2
}
}

Well you just have to format each key (date, time, exercise, duration and calories from my example) to a lower case format according to the field names you are using in your Google Sheet.

today_date = datetime.now().strftime("%d/%m/%Y")

So, you can't give a key name of ("Date_Today" : today_date) instead you have to write "date_today" : today_date

image

@AbdullahZulfikar
Copy link

image

I was having a similar error but I turn off the authorization module. And it worked

becasue when ur using the Authorization ur not porviding any toekn or any thing is missing u have to provide ur token if ur using Authorization

@pedsf1968
Copy link

from os import environ
import requests
import datetime

NUTRITIONIX_NATURAL_ENDPOINT = "https://trackapi.nutritionix.com/v2/natural/exercise"
NUTRITIONIX_API_ID = environ.get("NUTRITIONIX_API_ID")
NUTRITIONIX_API_KEY = environ.get("NUTRITIONIX_API_KEY")
SHEETY_WORKOUT_ENDPOINT = environ.get("SHEETY_WORKOUT_ENDPOINT")
SHEETY_WORKOUT_TOKEN = environ.get("SHEETY_WORKOUT_TOKEN")

WT_GENDER = "male"
WT_HEIGHT = "178"
WT_WEIGHT = "90"
WT_AGE = 55

def nutritionix_calculate_calories_from_query(api_id, api_key, query, gender, height, weight, age):
header = {
"x-app-id": api_id,
"x-app-key": api_key,
"Content-Type": "application/json"
}
body = {
"query": query,
"gender": gender,
"weight_kg": weight,
"height_cm": height,
"age": age,
}
response = requests.post(url=NUTRITIONIX_NATURAL_ENDPOINT, headers=header, json=body)
return response.json()["exercises"]

def sheety_get_workout():
header = {
"Authorization": f"Bearer {SHEETY_WORKOUT_TOKEN}"
}
response = requests.get(url=SHEETY_WORKOUT_ENDPOINT, headers=header)
print(response.text)

def sheety_post_workout(exercises):
now = datetime.datetime.now()
for exercise in exercises:
header = {
"Authorization": f"Bearer {SHEETY_WORKOUT_TOKEN}"
}
body = {
"workout": {
"date": now.strftime("%d/%m/%Y"),
"time": now.strftime("%X"),
"exercise": exercise["user_input"].title(),
"duration": exercise["duration_min"],
"calories": exercise["nf_calories"]
}
}
response = requests.post(url=SHEETY_WORKOUT_ENDPOINT, headers=header, json=body)
print(response.text)

def main():
query = input("Tell me wich exercice you did: ")
data = nutritionix_calculate_calories_from_query(api_id=NUTRITIONIX_API_ID,
api_key=NUTRITIONIX_API_KEY,
query=query,
gender=WT_GENDER,
height=WT_HEIGHT,
weight=WT_WEIGHT,
age=WT_AGE)

sheety_post_workout(exercises=data)
sheety_get_workout()

if name == "main":
main()

@shoaibkhan5676
Copy link

{'sheet1': {'id': 3}} i get this output but my spreadsheet didn't change?????

@kausy-123
Copy link

kausy-123 commented Dec 16, 2023

{'errors': [{'detail': 'The caller does not have permission'}]}
Please how do I rectify this, anyone?

please share your code.

Solution: First make a copy of the sheet with a new name and then make sure that the email id used for logging to google sheets is the same in sheety as well.
This should help rectify the problem.

@Edcarloszaya
Copy link

solucao desse erro
User
{
"errors": [
{
"detail": "The caller does not have permission"
}
]
}

Process finished with exit code 0

solucao pra mim
pra quem ta tendo esse erro simples apague seu projeto atual da API sheety cria uma nova planilha ou copia da angela click na planilha e pega link dessa planilha coloca quando for cria o projeto de novo na api sheety onde pede o link de sua planilha aqui resolveu assim,
demorou muito pra mim resolver isso ..

@Siris4
Copy link

Siris4 commented Feb 2, 2024

Can the USERNAME, PASSWORD , and TOKEN be any?

Yes.

@Siris4
Copy link

Siris4 commented Feb 2, 2024

{'sheet1': {'id': 3}} i get this output but my spreadsheet didn't change?????

id is an "extra data point" that sheety will generate. It won't be part of the column names you are trying to populate.

@MohamedHelmyCG
Copy link

Ladies and gentlemen
@shoaibkhan5676 @Sir-AryanG-NTfV @MahalakahmiMallela and everyone else
for debugging :

  1. Check first that you have actually created a new sheet to be able to edit it, not the one provided by angela.

  2. Once you create the sheet make sure you add the headers ( date , time , exercise,duration, calories ) so that it will be able to update and avoid giving you (undefined 0 ) and other error {
    "sheet1": {
    "id": 2
    }
    }

  3. most importantly remember to change the ""workout stated in angela sheet """ in the for loop .
    for exercise in result["exercises"]:
    sheet_inputs = {
    here instead of workouts place the name of your sheet, sheet1 in my example. "sheet1": {
    "date": today_date,
    "time": now_time,
    "exercise": exercise["name"].title(),
    "duration": exercise["duration_min"],
    "calories": exercise["nf_calories"]

@j10251025
Copy link

I think anyone who has the error of unauthorized can check both requests of the first post and the second get, if one of the request you forget to paste auth or token, you will get the error. PLS CHECK THE BOTH REQUESTS!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment