Skip to content

Instantly share code, notes, and snippets.

@sliceofbytes
Created February 14, 2018 22:16
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save sliceofbytes/f5eab8911c761ff6760362beb17e6477 to your computer and use it in GitHub Desktop.
Save sliceofbytes/f5eab8911c761ff6760362beb17e6477 to your computer and use it in GitHub Desktop.
Add Text Files as Google Keep Notes
#Import a directory of text files as google keep notes.
#Text Filename is used for the title of the note.
import gkeepapi, os
username = 'username@gmail.com'
password = 'your app password'
keep = gkeepapi.Keep()
success = keep.login(username,password)
dir_path = os.path.dirname(os.path.realpath(__file__))
for fn in os.listdir(dir_path):
if os.path.isfile(fn) and fn.endswith('.txt'):
with open(fn, 'r') as mf:
data=mf.read()
keep.createNote(fn.replace('.txt',''), data)
keep.sync();
@IonceM
Copy link

IonceM commented Jul 31, 2021

So, here is the coding, if you want to add a label to your notes
In my case, i wanted to upload some text - songfiles (this is why you see .sng), and i wanted them splitted after the first "---" encounter.

for fn in os.listdir(dir_path):
if os.path.isfile(os.path.join(dir_path, fn)) and fn.endswith('.sng'):
with open(os.path.join(dir_path, fn), 'r', encoding='utf-16') as mf:
data = mf.read().split("---",1)[1]
pretty_fn = fn.replace('.sng','')
gnote = keep.createNote(pretty_fn, data)
label = keep.findLabel('YourLabelNameInGoogleKeep')
gnote.labels.add(label)
print(keep.sync())

@IonceM
Copy link

IonceM commented Jul 31, 2021

for fn in os.listdir(dir_path):
	if os.path.isfile(os.path.join(dir_path, fn)) and fn.endswith('.txt'):
		with open(os.path.join(dir_path, fn), 'r', encoding='utf-8') as mf:
			data=mf.read()
			print(keep.createNote(fn.replace('.txt',''), data))
			print(keep.sync())
			time.sleep(5)

I modify it a little so it could support my 800++ notes because Google have limit for notes per minute

anyway thank you so much!

Have got a question - I guess i have now a problem after trying to creates notes to fast. So now i get exceptions of rate_limit_Exceeded. Did you have the same problem? was in enought for you to wait for it to disapear or did you take action, to "release" your google account?

On Google Cloud Platform it states that only 30 Notes per minute are allowed for creation, by API. Since I exceeded this number, i am restricted since more then 3 hours now to use Google Keep (Even Reading/Syncing in the app is throwing me the same excepetion as in the image down here)

2021-07-31 19_54_39-Eingabeaufforderung

@mootensai
Copy link

You could try to increase time.sleep value

@IonceM
Copy link

IonceM commented Jul 31, 2021

You could try to increase time.sleep value

Well, the issue is already at the login. I added the time sleep value later on to my skript, but since I can't do anything....I guess i will wait till my account is released from the usage limit

@IonceM
Copy link

IonceM commented Jul 31, 2021

You could try to increase time.sleep value

Well, the issue is already at the login. I added the time sleep value later on to my skript, but since I can't do anything....I guess i will wait till my account is released from the usage limit

I found a blog where it states that the reset occurs after 24h. So waiting seems fine.
https://support.cloudm.io/hc/en-us/articles/360009862299-Reaching-or-exceeding-Google-API-quotas

@tiabenson
Copy link

tiabenson commented Aug 10, 2021

Thank you! Worked for me without having to change anything.

I am a complete newb.. i am just trying to take all of my txt notes on my windows machine and add them to google keep.. just moved over from mac to windows..

how and where do i add that code

@joshhboss put your text and python files in the same directory, then run the .py file. You may have to pip install gkeepapi.

@WiliTest
Copy link

it works with python 3.9 kiwiz/gkeepapi#81

@Mactastic1-5
Copy link

Mactastic1-5 commented Nov 27, 2021

# This script needs to be in the same folder as the text files!

import time
import gkeepapi, os

username = '<username>' # Type your email address here
password = '<password>' # Use your app password here

keep = gkeepapi.Keep()
success = keep.login(username,password)
dir_path = os.path.dirname(os.path.realpath(__file__))
for fn in os.listdir(dir_path):
	if os.path.isfile(os.path.join(dir_path, fn)) and fn.endswith('.txt'):
		with open(os.path.join(dir_path, fn), 'r', encoding='utf-8', errors='ignore') as mf:
			data=mf.read()
			print(keep.createNote(fn.replace('.txt',''), data))
			print(keep.sync())
			time.sleep(5)

I tried it on Windows Subsystem for Linux through Ubuntu, and it doesn't authenticate. I tried many of the suggestions, and the outcome was the same. It works on macOS. Maybe if I installed Python 3 natively with Chocolatey, it would work.

@tu-design
Copy link

tu-design commented Mar 9, 2022

I was facing two errors: 1) Notes not copying due to ascii 2) Notes not copying due to encoding, you can solve them as follows if you have any different encode of text files (here: UTF8) and also added a print option for logs to check which file gives the error.

import gkeepapi, os
username = 'username@gmail.com'
password = 'app password'

keep = gkeepapi.Keep()
success = keep.login(username,password)
dir_path = os.path.dirname(os.path.realpath(__file__))
for fn in os.listdir(dir_path):
	print(fn)
	if os.path.isfile(fn) and fn.endswith('.txt'):
		with open(fn, encoding="utf8") as mf:
			data=mf.read()
			keep.createNote(fn.replace('.txt',''), data)
			keep.sync();

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