
Sideblog for https://www.tumblr.com/leilanising-vault-of-knowledge
191 posts
Import Requests
import requests
from requests_oauthlib import OAuth1
import json
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
import pickle
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import pyperclip
# Replace these values with your Tumblr API credentials
CONSUMER_KEY = 'IPTeKkiLSZ2wQ1io5vo5G37AN2thcbSwXOJgqL4SjHV2wLoNce'
CONSUMER_SECRET = 'lE97QdUIAj7svMGDznbcxmsFubj1iIr06hHJ4cLGCaM2wedIio'
TOKEN = 'wovWkA5KSv6XAbMvf5gkAr2V0hGyoRpxbdgM0uoN6qsSzg5OsI'
TOKEN_SECRET = 'gkDd6pBbvsPbUp0Eh95AQQp2CQi5qFzKNtvJ0qPo0far60BqxD'
# CONSUMER_KEY = 'wye8qq5zYT875se51OwUNwPaUvFjvE5ONkzYZ2nsgkoEXnUQfv'
# CONSUMER_SECRET = 'QxLe87coDa0NFzCZRS4KR6gOCxRIEzMqLzOVrH0hc1CVsUjJ35'
# TOKEN = 'fweQkfHHtNWgWiS8KOOFA6bzljfA47cldg44FkljdUbtaV51Uz'
# TOKEN_SECRET = 'l9uS5eLJ2XkRb8D93avCUTeLdxp6m8zDwUTTClgpNZjDGHYMFc'
# CONSUMER_KEY = 'ncRYD9hDIu0uV1tFk2bTxm2F3UDuZ1kM6gsTKO7TAIv9ZQ3rcW'
# CONSUMER_SECRET = '94lTdrh6izgyqP79aSI0HpBSvLAg4PiNRzYEHZTxGWrhWsr4MJ'
# TOKEN = 'vdPho0RVxZANZKVV02HzKKGDVbwMbMNdDckj1dy6GEqIXPvsX3'
# TOKEN_SECRET = '4f7Wfm8oc4mZ94BEH2z9P7fcOHt1tm8AoI3LoAThfKsZ1gWFSz'
# Tumblr API endpoints
BASE_URL = "https://api.tumblr.com/v2"
SENT_ASKS_FILE = "sent_asks.json"
BLOG_NAME = "abedalazeiz"
POST_ID = "756236689516691456"
ASK_MESSAGE = ("I know for sure that you can't help all families from Gaza that want to be evacuated from here but at least you can help those who come across your life. You have no idea how mentally and emotionally tiring this is. Asking for help is not easy. But when thinking that the price is my family's life and getting out of here safely, it just pushes me more and more to do this until i reach my goal, be able to attend my university abroad and achieve my doctoral degree dream after awarding prestigious PhD fellowship. Please donate and share to support us standing at this hard time.\n https://gofund.me/d597b8e2")
# OAuth 1.0a authentication
auth = OAuth1(CONSUMER_KEY, CONSUMER_SECRET, TOKEN, TOKEN_SECRET)
# = ""
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--start-maximized")
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.page_load_strategy = 'none' #eager
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
def load_sent_asks():
try:
with open(SENT_ASKS_FILE, 'r') as file:
sent_asks = json.load(file)
print(f"Loaded sent asks: {sent_asks}")
return sent_asks
except FileNotFoundError:
print("No sent asks file found, starting fresh.")
return []
def save_sent_asks(sent_asks):
with open(SENT_ASKS_FILE, 'w') as file:
json.dump(sent_asks, file)
def get_reblogs(after=None):
url = f"{BASE_URL}/blog/{BLOG_NAME}/notes?id={POST_ID}&mode=likes&limit=20" #reblogs
if after:
url += f"&after={after}"
print(f"Fetching reblogs from URL: {url}")
response = requests.get(url, auth=auth)
response.raise_for_status()
return response.json()
def send_ask(account_name):
print(f"Sending ask to {account_name}")
driver.get(f"https://www.tumblr.com/new/ask/{account_name}")
driver.implicitly_wait(40)
actions = ActionChains(driver)
try:
#loadingSelector = '#glass-container > div > div > div > div > div > div > div.Y21sU > div > div.oDBam > div > div'
#WebDriverWait(driver, 30).until(EC.invisibility_of_element_located(driver.find_element(By.CSS_SELECTOR, loadingSelector)))
#actions.key_down(Keys.ENTER).key_up(Keys.ENTER).perform()
field = driver.find_element(By.CSS_SELECTOR, '#glass-container > div > div > div > div > div > div > div.Y21sU > div > div.oDBam > div:nth-child(2) > div > div:nth-child(4) > div.block-editor-writing-flow > div > div')
field.send_keys("\n")
actions.key_down(Keys.LEFT_CONTROL).send_keys('v').key_up(Keys.LEFT_CONTROL).perform()
askselector = '#glass-container > div > div > div > div > div > div > div.Y21sU > div > div.Q1jRN > div > div > div > button > span'
ask = driver.find_element(By.CSS_SELECTOR, askselector)
ask.click()
WebDriverWait(driver, 60).until(EC.invisibility_of_element_located(ask))
except Exception as e:
print("hmmm")
def main():
print("Starting script...")
sent_asks = load_sent_asks()
previousSave = len(sent_asks)
after = None
pyperclip.copy(ASK_MESSAGE)
try:
with open('cookies.pkl', 'rb') as file:
cookies = pickle.load(file)
driver.get('https://www.tumblr.com')
for cookie in cookies:
driver.add_cookie(cookie)
#driver.refresh()
except FileNotFoundError:
driver.get('https://www.tumblr.com/login')
input("Log in to Tumblr and then press Enter to continue...")
cookies = driver.get_cookies()
with open('cookies.pkl', 'wb') as file:
pickle.dump(cookies, file)
while True:
data = get_reblogs(after=after)
reblogs = data.get('response', {}).get('notes', [])
if not reblogs:
break
for reblog in reblogs:
account_name = reblog['blog_name']
if account_name in sent_asks:
print(f"Already sent ask to {account_name}, skipping.")
continue
try:
url = f"https://api.tumblr.com/v2/blog/{account_name}/info"
response = requests.get(url, auth=auth)
if response.status_code == 200:
blog_info = response.json().get('response', {}).get('blog', {}).get('ask', False)
if blog_info:
send_ask(account_name)
sent_asks.append(account_name)
save_sent_asks(sent_asks)
else:
print(f"{account_name} doesn't accept asks")
else:
return print("request not available")
except requests.exceptions.HTTPError as e:
print(f"Failed to process {account_name}")
after = data.get('response', {}).get('_links', {}).get('next', {}).get('href')
if not after:
break
# url = f"https://api.tumblr.com/v2/blog/impossiblebool/info"
# response = requests.get(url, auth=auth)
# if response.status_code == 200:
# blog_info = response.json().get('response', {}).get('blog', {}).get('ask', False)
# send_ask("impossiblebool")
# else:
# return print(f"impossiblebool doesn't accept asks>>>>")
print(f"Script finished, new sent asks number: {len(sent_asks) - previousSave}")
if __name__ == "__main__":
main()

This has been vetted. Please share, and donate if you can <3
More Posts from Leilanising-sideblog
Are u alive? ;4
hewo my friend!! Thank you so much for checking on me!
While this blog is technically my side account, it's actually my main account, but I'm more active on my side account, here! @leilanising
I am so sorry for the confusion 😔 but I rlly appreciate getting a message from you ^^
https://gofund.me/2b8a25aa
🇵🇸🍉🇵🇸🍉🇵🇸🍉🇵🇸🍉
Hey there! I am Majed from Gaza. My family and I are in desperate need of help to rebuild our lives after escaping the war in Gaza💔. Every donation can make a huge difference in securing a safe home and allowing my children to continue their education🙏. Please click the link below to donate or share our story.❤️🍉

This has been vetted. Please share and donate if you can <3
Miss Power threatens to deprive Dr. Two-Brains of his needs (Episode: The Rise of Miss Power)
URGENT APPEAL !!!
Don't ignore appeal please please 🥺, time is running out, my little son is very sick he can't breathe normally, He is breathing through a ventilator in the hospital
Donation a LIFE to US
My compaign vetted by 90-ghost, North Gaza updated and butterfly project line no. 406
https://www.tumblr.com/90-ghost/755122452856700928?source=share
My compaign link
https://www.gofundme.com/f/save-the-life-of-an-innocent-child
Please don't leave my little son alone and donate if you can
Thanks 🙏🍉

This has been vetted. Please share and donate if you can <3
careful it leaves a mark
Animation by: Yin Youtube Twitter
Idea by AB