-
-
Save divyajyotiuk/9fb29c046e1dfcc8d5683684d7068efe to your computer and use it in GitHub Desktop.
| import json | |
| import glob | |
| all_bookmarks = [] | |
| md_file = open("bookmarks.md", "w+") # saving in markdown file, if no file exists using '+' creates one | |
| files = [file for file in glob.glob("JSONBookmarks/*")] # using glob to read all files from the folder | |
| for file_name in files: | |
| print(file_name) | |
| with open(file_name) as bk: | |
| data = json.load(bk) # reads json data | |
| all_bookmarks.append(data) | |
| #print(json.dumps(response, indent = 1)) # pretty prints JSON data | |
| # Function to get profile pic if you need | |
| def getAuthorProfilePic(id): | |
| return response["users"][id]["profile_image_url_https"] | |
| # Function to get username | |
| def getUserName(id): | |
| return response["users"][id]["screen_name"] | |
| # Function to construct bookmarked tweet url | |
| def constructUrl(tweet_id, username): | |
| return "https://twitter.com/" + username + "/status/" + tweet_id | |
| # Function to format the text to write in file | |
| def formatText(text): | |
| text = text.replace("\n-", " ") | |
| text = text.replace("\n", " ") | |
| text = text[:100] + "..." | |
| return text | |
| # Run a loop through all_bookmarks | |
| for data in all_bookmarks: | |
| response = data["globalObjects"] | |
| for tweet_id in response["tweets"]: | |
| tweet = response["tweets"][tweet_id] | |
| text = tweet["full_text"] | |
| text = formatText(text) | |
| url = constructUrl(tweet_id, getUserName(tweet["user_id_str"])) | |
| bookmarked_tweet = "\n- " + text + "\n" + "\t - " + url | |
| md_file.write(bookmarked_tweet) |
| import json | |
| import glob | |
| import functools | |
| all_bookmarks = [] | |
| md_file = open("bookmarks.md", "w+") # saving in markdown file, if no file exists using '+' creates one | |
| files = [file for file in glob.glob("JSONBookmarks/*")] # using glob to read all files from the folder | |
| for file_name in files: | |
| print(file_name) | |
| with open(file_name) as bk: | |
| data = json.load(bk) # reads json data | |
| all_bookmarks.append(data) | |
| #print(json.dumps(response, indent = 1)) # pretty prints JSON data | |
| # Function to construct bookmarked tweet url | |
| def constructUrl(tweet_id, username): | |
| return "https://twitter.com/" + username + "/status/" + tweet_id | |
| # Function to format the text to write in file | |
| def formatText(text): | |
| text = text.replace("\n-", " ") | |
| text = text.replace("\n", " ") | |
| text = text[:100] + "..." | |
| return text | |
| # Method to get value of nested dictionary | |
| def deep_get(dictionary, keys, default=None): | |
| return functools.reduce(lambda d, key: d.get(key, default) if isinstance(d, dict) else default, keys.split("."), dictionary) | |
| # Run a loop through all_bookmarks | |
| for data in all_bookmarks: | |
| instructions_list = deep_get(data, "data.bookmark_timeline.timeline.instructions") | |
| tweet_entries_list = deep_get(instructions_list[0], "entries") | |
| for tweet_entry in tweet_entries_list: | |
| result = deep_get(tweet_entry, "content.itemContent.tweet_results.result") | |
| username = deep_get(result, "core.user.legacy.screen_name") | |
| text = deep_get(result, "legacy.full_text") | |
| tweet_id = deep_get(result, "rest_id") | |
| if tweet_id == None or username == None or text == None: | |
| continue | |
| text = formatText(text) | |
| url = constructUrl(tweet_id, username) | |
| bookmarked_tweet = "\n- " + text + "\n" + "\t - " + url | |
| md_file.write(bookmarked_tweet) |
| import json | |
| import glob | |
| import functools | |
| all_bookmarks = [] | |
| md_file = open("bookmarks.md", "w+") # saving in markdown file, if no file exists using '+' creates one | |
| files = [file for file in glob.glob("JSONBookmarks/*")] # using glob to read all files from the folder | |
| for file_name in files: | |
| print(file_name) | |
| with open(file_name) as bk: | |
| data = json.load(bk) # reads json data | |
| all_bookmarks.append(data) | |
| # print(json.dumps(all_bookmarks, indent = 1)) # pretty prints JSON data | |
| # Function to construct bookmarked tweet url | |
| def constructUrl(tweet_id, username): | |
| return "https://twitter.com/" + username + "/status/" + tweet_id | |
| # Function to format the text to write in file | |
| def formatText(text): | |
| text = text.replace("\n-", " ") | |
| text = text.replace("\n", " ") | |
| text = text[:100] + "..." | |
| return text | |
| # Method to get value of nested dictionary | |
| def deep_get(dictionary, keys, default=None): | |
| return functools.reduce(lambda d, key: d.get(key, default) if isinstance(d, dict) else default, keys.split("."), dictionary) | |
| # Run a loop through all_bookmarks | |
| for data in all_bookmarks: | |
| instructions_list = deep_get(data, "data.bookmark_timeline.timeline.instructions") | |
| if instructions_list==None: continue | |
| tweet_entries_list = deep_get(instructions_list[0], "entries") | |
| for tweet_entry in tweet_entries_list: | |
| result = deep_get(tweet_entry, "content.itemContent.tweet_results.result") | |
| username = deep_get(result, "core.user_results.result.legacy.screen_name") | |
| text = deep_get(result, "legacy.full_text") | |
| tweet_id = deep_get(result, "rest_id") | |
| if tweet_id == None or username == None or text == None: continue | |
| text = formatText(text) | |
| url = constructUrl(tweet_id, username) | |
| bookmarked_tweet = "\n- " + text + "\n" + "\t - " + url | |
| md_file.write(bookmarked_tweet) |
I'm a little unclear on the origin of the
JSONBookmarks/*data. Could you clarify how to initially populate the bookmark data? Are you using data from /2/users/:id/bookmarks?
See https://dev.to/divyajyotiuk/exporting-your-twitter-bookmarks-in-markdown-file-19bj
@divyajyotiuk I just did an export of my bookmarks and the json looked like this (note the "v2"):
{"data":{"bookmark_timeline_v2":{"timeline":{"instructions":[{"type":"TimelineAddEntries","entries":[{...
When changing that in your v3 code, it works smoothly for me.
Thanks ! The v3 works for me.
In my case, I have to add encoding utf8 :
md_file = open("bookmarks.md", "w+", encoding="utf8")
open(file_name, encoding="utf8")
Like @kiu I also needed to update line 34 to this to parse the bookmarks I just downloaded:
instructions_list = deep_get(data, "data.bookmark_timeline_v2.timeline.instructions")
(the bookmark_timeline_v2 is the new part)
I'm a little unclear on the origin of the
JSONBookmarks/*data. Could you clarify how to initially populate the bookmark data? Are you using data from /2/users/:id/bookmarks?