def __init__(self, token_v2, notes_collection_url, tags_colleciton_url): client = NotionClient(token_v2=token_v2) self.notes_collection = client.get_collection_view( notes_collection_url) self.tags_collection = client.get_collection_view(tags_colleciton_url)
def updateCalender(token): client = NotionClient(token) calender = client.get_collection_view(url_calender) impfungen = client.get_collection_view(url_impfungen) kalender = client.get_collection_view(url_kalender_sync) todo = client.get_collection_view(url_todo) freunde = client.get_collection_view(url_freunde) for impfung in impfungen.collection.get_rows(search=''): if impfung.exportedToCalender == False: calenderEntry = calender.collection.add_row() calenderEntry.name = impfung.name calenderEntry.type = 'Impfungen' impfung.calender = calenderEntry impfung.exportedToCalender = True for to in todo.collection.get_rows(search=''): if to.exportedToCalender == False: calenderEntry = calender.collection.add_row() calenderEntry.name = to.name calenderEntry.type = 'ToDo' to.calender = calenderEntry to.exportedToCalender = True for eintrag in calender.collection.get_rows(search=''): if eintrag.exportedToCalender == False: calenderEntry = calender.collection.add_row() calenderEntry.name = eintrag.name calenderEntry.type = 'Kalender' eintrag.calender = calenderEntry eintrag.exportedToCalender = True for person in freunde.collection.get_rows(search=''): if person.exportedToCalender == False: calenderEntry = calender.collection.add_row() calenderEntry.name = person.name calenderEntry.type = 'Geburtstag' person.calender = calenderEntry person.exportedToCalender = True
def add_visit(token, clients_url, visits_url, telefon, fio, chto_budem_delat, stoimost, datetime_start, datetime_end): client = NotionClient(token) clients_collection = client.get_collection_view(clients_url) # filter_params = [{ # "property": "telefon", # "comparator": "enum_contains", # "value": telefon # }] # results = clients_collection.build_query(filter=filter_params).execute() # if results: # customer = results[0] # else: # customer = clients_collection.collection.add_row() # customer.telefon = telefon # customer.fio = fio visits_collection = client.get_collection_view(visits_url) visit = visits_collection.collection.add_row() # visit.klient = customer try: visit.stoimost = int(stoimost) except: pass visit.chto_budem_delat = chto_budem_delat visit.data = NotionDate(start=datetime_start, end=datetime_end)
def hello(): client = NotionClient(token_v2=os.environ.get("NOTION_TOKEN")) cv = client.get_collection_view( "https://www.notion.so/larskarbo/7aa8bbb6129241dbb03f9460e6270113?v=5ebb4bee12c34ef09408c8c0cbb0df45" ) rows = cv.collection.get_rows() bar = Bar('Processing', max=len(rows)) for row in rows: bar.next() # if row.name == "2 brødskiver med kaviar og egg": for child in row.children: if child.type == "collection_view": # child cv2 = client.get_collection_view(child.views[0].id, collection=child.collection) macros = macroCalcTable(cv2, row.name, row.antall_porsjoner) row.protein = macros["protein"] row.fett = macros["fett"] row.karbohydrat = macros["karbohydrat"] row.kcal = "🔥 " + str(macros["kcal"]) + " kcal" row.kroner = "💰 " + str(macros["kroner"]) + " kr" if cv2 is None: print("cv2 is none") return bar.finish()
def is_valid_table(): """ Return True if table is valid """ client = NotionClient(token_v2=NOTION_TOKEN) try: client.get_collection_view(NOTION_TABLE_URL) return True except AssertionError: return False
class Notion: def __init__(self, token): self.client = NotionClient(token_v2=token) self.url = None def set_url(self, url): self.url = url def get_table(self, dropna=False): table = self.client.get_collection_view(self.url) rows = [] for row in table.collection.get_rows(): rows.append(self._get_row_item(row)) table_df = pd.DataFrame(rows, columns=list(row.get_all_properties().keys())) if dropna: table_df = table_df.dropna().reset_index(drop=True) return table_df def _get_row_item(self, row): items = [] for col, item in row.get_all_properties().items(): type_ = type(item) item = row.get_property(identifier=col) if type_ not in [list, NotionDate]: items.append(item) elif type_ == list: items.append(' '.join(item)) elif type_ == NotionDate: items.append(item.__dict__['start']) return items def insert_rows(self, item_dict): table = self.client.get_collection_view(self.url) row = self._create_new_record(table) for col_name, value in item_dict.items(): row.set_property(identifier=col_name, val=value) def _create_new_record(self, table): row_id = self.client.create_record('block', parent=table.collection, type='page') row = CollectionRowBlock(self.client, row_id) with self.client.as_atomic_transaction(): for view in self.client.get_block(table.get("parent_id")).views: view.set("page_sort", view.get("page_sort", []) + [row_id]) return row
def get_changes_data(): print("Scraping changes data off Notion stories") print() client = NotionClient(token_v2=notion_token_v2) cv = client.get_collection_view( "https://www.notion.so/humanagency/53a3254e681e4eb6ab53e037d0b2f451?v=68afa83bf93f4c57aa38ffd807eb3bf1" ) addedStories = [] allChanges = pd.DataFrame(columns=('ID', 'Story', 'Status', 'Change Date', 'Name', 'Title', 'Ship Date')) changeView = client.get_collection_view( "https://www.notion.so/humanagency/a11ad18166f445e694c64037fbfd7d5b?v=67d6efa07c224fdc89603e1d9eb6ad5d" ) #Iterate through the stories on the Product Lineup, check if in column 13 for row in cv.collection.get_rows(): if row.status == '13. Complete! (On Live)' and row.story not in addedStories: firstIteration = True #Run through the changes table to look for changes with the same story as the current story for change_row in changeView.collection.get_rows(): block = client.get_block(change_row.id) for item in block.story: if item.title == row.story: if firstIteration: print(f"Scraping changes data from {row.story}") addedStories.append(row.story) firstIteration = False title = block.title if block.time_correction: time = block.time_correction.start else: time = block.time time = time - timedelta(hours=5) status = block.status full_name = block.change_made_by allChanges = allChanges.append( { 'ID': row.id, 'Story': row.story, 'Status': status, 'Change Date': time, 'Name': full_name, 'Title': title, 'Ship Date': row.ship_date.start }, ignore_index=True) return order_by_time(allChanges)
class Context: settings: Settings config: Config todo_col: CollectionBlock scheduled_col: CollectionBlock client: NotionClient def __init__(self, config: Config, settings: Settings): self.config = config self.settings = settings self.client = NotionClient(token_v2=config.token_v2) self.todo_col = self.client.get_collection_view( config.tasks_collection_url, force_refresh=True).collection self.scheduled_col = self.client.get_collection_view( config.scheduled_collection_url, force_refresh=True).collection
def hello(): client = NotionClient(token_v2=os.environ["NOTION_TOKEN"]) cv = client.get_collection_view( "https://www.notion.so/larskarbo/b7fa0ea238224fa0a0c947e7b81f14de?v=b5bc7261778446dda00869546855fdc0" ) rows = cv.collection.get_rows() # bar = Bar('Processing', max=len(rows)) for row in rows: # bar.next() print("row.name", row.name) print("row.bilde", row.bilde) state = "active" if len(row.bilde) == 0: state = "disabled" addTask(n_id=(row.id), fields={ "question": "wtf", "answer": row.name, "answerLink": row.get_direct_browseable_url(), "path": ["DIV"], "state": state })
def updateNotionTask(token, collectionURL, externalid): # notion client = NotionClient(token) cv = client.get_collection_view(collectionURL) for row in cv.collection.get_rows(search=externalid): if row.externalid == externalid: row.done = True
def createNotionRowGeneric(token, collectionURL, request): # notion client = NotionClient(token) print('notion-url- {}'.format(collectionURL)) cv = client.get_collection_view(collectionURL) request_dict = dict(request.headers) request_keys = set(request_dict.keys()) uid = request.headers.get('uid') match_rows = [] for r in cv.collection.get_rows(): if uid == r.UID: match_rows.append(r) dd = cv.collection.query() ## hack to initialize the view if not match_rows: row = cv.collection.add_row() else: ## Ignore all other matched rows row = match_rows[0] notion_keys = set( [i.capitalize() for i in list(row.get_all_properties().keys())]) for key in (request_keys & notion_keys): print('key - {} -'.format(key)) setattr(row, key, request.headers.get(key)) data = dict(request.get_json()) for key in data: row.children.add_new(TextBlock, title=data[key])
def sync_goal_table(goals, client=None): bee_2_notion_props = { "runits": "period", "rate": "set_rate", "name": "slug", "buffer_days": "safebuf", "goal_type": "goal_type" } if not client: client = NotionClient(token_v2=NOTION_TOKEN) collection = client.get_collection_view(NOTION_CV_URL).collection for goal in goals: notion_row = get_or_create_row(collection, goal.slug) #for props in bee_2_notion_props.keys(): # notion_row[bee_2_notion_props[]] if notion_row: safe = (goal.safe_buffer() or goal.entered_data_today()) and bool( goal.safebuf) notion_row.safe = safe notion_row.buffer_days = str(goal.safebuf) notion_row.frequency = str(round(goal.cur_rate(), 1)) + "/" + str( goal.runits) notion_row.rate = str(goal.rate) + "/" + str(goal.runits)
def createCalendarEvent(TOKEN, collectionURL, description, event_begins, event_ends, location, summary, duration_mins, event_begins_pretty, id): # notion print("Entered createCalendarEvent for " + summary) client = NotionClient(TOKEN) cv = client.get_collection_view(collectionURL) row = cv.collection.add_row() row.Action_Item = summary row.Status = "Active" row.Priority = "Scheduled" row.Note = ( ("Location: " + location) if (location != None) else "") + "Description: " + str(description) #handle start time: print("Received event with timestamp of " + str(event_begins) + '\n') event_start_params = re.split('[-T:+]', event_begins) event_start_params = [int(i) for i in event_start_params] esp = event_start_params if len(esp) == 8: #In case a time was given and not only date event_start = datetime( esp[0], esp[1], esp[2], esp[3], esp[4], esp[5]).replace( tzinfo=gettz("Israel")) #- timedelta(hours = int(esp[6])) else: #In case only a date was provided event_start = datetime(esp[0], esp[1], esp[2]) row.Do_Date = event_start print("Finished createCalendarEvent for " + summary)
def createNotionTask(token, collectionURL, title, content): # notion client = NotionClient(token) cv = client.get_collection_view(collectionURL) row = cv.collection.add_row() row.title = title row.children.add_new(TextBlock, title=content)
def createNotionTask(token, collectionURL, name, email): # notion client = NotionClient(token) cv = client.get_collection_view(collectionURL) row = cv.collection.add_row() row.title = name row.email = email
class ExpenseTableClient: def __init__(self, token, page_url, table_url): self.client = NotionClient(token_v2=token) self.page = self.client.get_block(page_url) self.table = self.client.get_collection_view(table_url) self.categories = EXPENSE_CATEGORIES def add_expense(self, categories, amt, payment_type, transaction_date, expense='Default Expense', additional=None): row = self.table.collection.add_row() row.Expense = expense row.Categories = categories row.Amount = amt row.Date = transaction_date row.Type = payment_type row.Additional = additional # NOT WORKING def add_month_view(self, page, table_id): collection = self.client.get_collection( table_id) # get an existing collection cvb = page.children.add_new(CollectionViewBlock, collection=collection) view = cvb.views.add_new(view_type="table")
def access_database(): client = NotionClient(token_v2=args.token) # Access a database using the URL of the database page or the inline block cv = client.get_collection_view( "https://www.notion.so/liguoqinjim/3f253e90fea2424aa1d7224b526b04a5?v=c26bee77d48e4a3fade236ff1ae49498" ) print(cv) # List all the records with "Bob" in them for row in cv.collection.get_rows(): print("id={}".format(row.id)) print("name={}".format(row.title)) block = client.get_block(row.id) print(block) props = block.get_all_properties() print(props) print(type(props)) break # Add a new record row = cv.collection.add_row() row.title = "Just some data2" print(row) block = client.get_block(row.id) props = block.get_all_properties() print("props:{}".format(props)) # 设置row的值 block.set_property("fen_lei", "历史")
def test_todo_desk(): TOKEN = '12828fc2a49d4301f495c09c4532089219a1d48db6bcffb301b1b308d895ce70e98197c5b1d4e0da6b2bb5d497da10241140a47f959ffe484941472dfda2719c35a8804fb68e35f2b36689ae47be' NOTION = "https://www.notion.so/f8e9e4d17e7d4e7696595a8d56948f3b?v=d938f8f324374cf9a41ae129ebfe0301" today = datetime.datetime.now().date() client = NotionClient(TOKEN) cv = client.get_collection_view(NOTION) filter_params = { "filters": [{ "filter": { "value": { "type": "exact", "value": "DONE" }, "operator": "enum_is" }, "property": "Status", }] } current_rows = cv.collection.get_rows(filter=filter_params) for row in current_rows: if row.set_date.start > today: continue if row.set_date.start < today: calculate_due_day(row) elif row.set_date.start == today: row.status = "TO DO" return 'ok'
def main(config): # Obtain the `token_v2` value by inspecting your browser cookies on a logged-in session on Notion.so client = NotionClient(token_v2=config["notion"]["token"]) # Replace this URL with the URL of the page you want to edit page = client.get_block(config["notion"]["database"]) print("The old title is:", page.title) # Access a database using the URL of the database page or the inline block cv = client.get_collection_view(config["notion"]["database"]) for row in cv.collection.get_rows(): print(row) # Add a new record row = cv.collection.add_row() row.name = "Just some data" row.is_confirmed = True row.estimated_value = 399 row.files = [ "https://www.birdlife.org/sites/default/files/styles/1600/public/slide.jpg" ] row.person = client.current_user row.tags = ["A", "C"] row.where_to = "https://learningequality.org"
def addTodoEntry(name, dueDate=False, desc=False): if "TG2N_NOTION_TOKEN" not in os.environ: return client = NotionClient(token_v2=os.environ['TG2N_NOTION_TOKEN'], start_monitoring=False) if "TG2N_NOTION_CV_LINK" not in os.environ: return cv = client.get_collection_view(os.environ['TG2N_NOTION_CV_LINK']) row = cv.collection.add_row() row.todo = name if dueDate: if " " in dueDate: dueDate = datetime.datetime.strptime(dueDate, '%Y%m%d %H%M') else: dueDate = datetime.datetime.strptime(dueDate, '%Y%m%d') tz = "Europe/Berlin" if "TG2N_TIMEZONE" in os.environ: tz = os.environ['TG2N_TIMEZONE'] row.reminder = NotionDate(dueDate, None, timezone(os.environ['TG2N_TIMEZONE'])) if desc: todoEntryPageId = row.id todoEntryPage = client.get_block(todoEntryPageId) child = todoEntryPage.children.add_new(TextBlock, title=desc)
def sync_all(): site_id = 1 config = Config.objects.get(site_id=site_id) try: client = NotionClient(token_v2=config.token or settings.TOKEN_V2, monitor=False) except ConnectionError as e: lgr.error(e) return cv = client.get_collection_view( "https://www.notion.so/danleyb2/ef408360691a4cd0a62251e4366117d6?v=72472887ddf44307a31b20925faadb4b" ) lgr.info(cv) category, created = Category.objects.get_or_create(name='default', site_id=1, slug='default') posts_update_run = timezone.now() # List all the records in the collection for row in cv.collection.get_rows(): process_post(row, config, posts_update_run)
def insertIntoInbox(token, collectionURL, header, body): # notion client = NotionClient(token) cv = client.get_collection_view(url_inbox) newInbox = cv.collection.add_row() newInbox.name = header newInbox.children.add_new(TextBlock, title=body)
def page(pid): token = request.headers.get('Authorization').split()[-1] page_url = f"https://notion.so/{pid}?v={request.args['v']}" # initialize notion db page client = NotionClient(token_v2=token) page = client.get_collection_view(page_url) sort_params = [] filter_params = {"filters": [], "operator": "and"} for arg in request.args.items(): if arg[1] == 'asc' or 'desc': param = {"property": arg[0], "direction": f"{arg[1]}ending"} sort_params.append(param) result = page.build_query(sort=sort_params, filter=filter_params).execute() # handle reponse response = [] for r in result: data = {} for attr in dir(r): if not attr.startswith('_') and attr not in IGNORE_ATTRS: data[attr] = getattr(r, attr) response.append(data) if 'limit' in request.args: response = response[:int(request.args['limit'])] return jsonify(response)
def createNotionTask(token, collectionURL, content): # notion client = NotionClient(token) cv = client.get_collection_view(collectionURL) row = cv.collection.add_row() row.title = content row.categories = "d8b32dac-7d11-4879-813f-5acdb040fd33"
def getTags(v2, db): from notion.client import NotionClient try: client = NotionClient(token_v2=v2) print("Connected") except: print("Error v2") try: cv = client.get_collection_view(db) print("Connected") except: print("Error db") try: values = [] a = cv.collection.get_schema_properties() s = a[2]['id'] b = cv.collection.get_schema_property(s) for c in b['options']: values.append(c['value']) print("Added {}".format(c['value'])) return values except: return values
def hello(): client = NotionClient( token_v2="738991375dbb49e1050ead92da668fb277c43c6df82f1dd49b6e667a3d83a8da738051a0a7d489d04dccaa043b81e6d196beaa11f7e6a4e233a96491391d13337a9fbc7a2911f6a9f9a4452f1192") cv = client.get_collection_view( "https://www.notion.so/larskarbo/534d0728c32d474c9d23315d8afc82d5?v=f8eed84cbef6437ca18f9506f8469fe4") rows = cv.collection.get_rows() for i in range(5): nums = [] rand = rows[randint(-1, len(rows)-1)] p = rand.person nums.append(rand.name) rand = rows[randint(-1, len(rows)-1)] h = rand.handling nums.append(rand.name) rand = rows[randint(-1, len(rows)-1)] o = rand.objekt nums.append(rand.name) print("{} {} på {}".format(p, h.lower(), o.lower())) val = input("Enter your value: ") if val[0:2] == nums[0] and val[2:4] == nums[1] and val[4:6] == nums[2]: print("hurray!!") else: print("wrong") print(val) print(nums)
def create_entry(): token = request.args.get("token") content = request.get_json(silent=True) print(content) ## [{ value, slug, type }] client = NotionClient(token) url = request.args.get('url') cv = client.get_collection_view(url) row = cv.collection.add_row() ## Types: ## date => NotionDate ✅ ## relation => ???? ## title => string ✅ ## select => string ✅ for prop in content: val = prop['value'] if (prop['type'] == 'date'): datet = datetime.fromtimestamp(prop['value']) val = NotionDate(datet) row.set_property(prop['slug'], val) response = app.response_class(status=200, mimetype='application/json') return response
def organize(): client = NotionClient(token_v2=TOKEN_V2) page = client.get_collection_view(TASK_LIST_URL) for row in page.collection.get_rows(): property = row.name.split("@")[-1] row.property = property
def _get_table(self, params): client = NotionClient(token_v2=params.token_v2) cv = client.get_collection_view(params.url) rows = cv.default_query().execute() cv_id, public_id = self._get_columns_id(rows[0]) datetime_list, cv_score_list, public_score_list = [], [], [] for row in rows: if 'properties' in row.get(): v = row.get()['properties'] if public_id in v: start_date = re.findall(r"'start_date': '(.+)',", str(v))[0] start_time = re.findall(r"'start_time': '(.+)'}", str(v))[0] t = datetime.strptime(start_date + ' ' + start_time, '%Y-%m-%d %H:%M') cv_score = float(v[cv_id][0][0]) public_score = float(v[public_id][0][0]) datetime_list.append(t) cv_score_list.append(cv_score) public_score_list.append(public_score) df = pd.DataFrame({ 'datetime': datetime_list, 'cv_score': cv_score_list, 'public_score': public_score_list }) df.sort_values(by='datetime') return df
def get_existing_row(id_row): client = NotionClient(token) cv = client.get_collection_view(collectionURL) row_to_delete = None for row in cv.collection.get_rows(): if row.ID == id_row: return row return None