টুইটার (X) এ লাইক করা সমস্ত কিছু পাওয়ার জন্য একটি স্ক্রিপ্ট
নমস্কার, আমি অযোগ্য। আমি Twikit নামক একটি অনানুষ্ঠানিক API ব্যবহার করে টুইটার স্ক্র্যাপ করতে পারি, কিন্তু কিছু সময় ধরে নমুনা কোডে অ্যাসিঙ্ক্রোনাস অপারেশন সুপারিশ করা হচ্ছিল। আপগ্রেড করার পর, আমি দেখলাম যে আমাকে অ্যাসিঙ্ক্রোনাসভাবে কাজ করতে বলা হচ্ছে, তাই আমি সবকিছু ঠিক করে দিয়েছি।
haturatu/xd_likes
এইভাবে, আমি প্রথমে সেগুলিকে all_tweets-এ সংরক্ষণ করব।
একবার নির্দিষ্ট সর্বোচ্চ মান পাওয়া গেলে,
আমি all_tweets-এর টুইটগুলির সমস্ত টুইট বিষয়বস্তু পুনরুদ্ধার করব।
এই সমস্ত কিছু fav.log-এ লেখা হবে, তাই প্রয়োজনে grep ব্যবহার করে সমস্ত তথ্য বের করা যাবে।
API সীমাবদ্ধতা
https://github.com/d60/twikit/blob/main/ratelimits.md
যেমনটি আপনি দেখতে পাচ্ছেন, API সীমাবদ্ধতাগুলি একে অপরের থেকে বেশ ভিন্ন।
অতএব, রিট্রাই সেটিংস সহ কয়েকবার চেষ্টা করা প্রয়োজন ছিল।
# リトライ設定
RETRY_LIMIT = 10
RETRY_DELAY = 300
# リトライ時に実行させる関数
async def perform_request_with_retries(request_func, *args, **kwargs):
for attempt in range(RETRY_LIMIT):
try:
response = await request_func(*args, **kwargs) # 非同期リクエストを待機
if response:
return response
except ReadTimeout:
logger.warning(f"Attempt {attempt + 1} failed due to ReadTimeout.")
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed: {e}")
await asyncio.sleep(RETRY_DELAY)
raise Exception("Failed to fetch more tweets after retries.")
API সীমাবদ্ধতাগুলি প্রতি 15 মিনিটে রিসেট হয় বলে মনে হয়, তাই যদি আমি মোট 50 মিনিটের জন্য চেষ্টা করতে পারি, তবে আমি মনে করি আমি যথেষ্ট সময় তৈরি করতে পেরেছি। এই অংশটি বেশ একটি বাধা ছিল; এটিকে শেষ সীমা পর্যন্ত ঠেলে দিলে অসীম সময় নষ্ট হচ্ছিল, তাই আমি সর্বোচ্চ মানকে ব্যাপকভাবে বাড়িয়ে দিয়েছি।
ছবি সংরক্ষণ
আমি লাইক পাওয়ার স্ক্রিপ্ট থেকে ডাউনলোড করার স্ক্রিপ্টকে আলাদা করেছি।
xd.py-তে ছবি সংরক্ষণ করা হবে।
যদি মানক হিসাবে রাখা হয়, তবে ছবিগুলি সর্বোচ্চ গুণমানে সংরক্ষণ করা যাবে না, তাই আমি প্রাপ্ত URL-এ 'original' প্যারামিটার যোগ করব।
while user_tweets:
for tweet in user_tweets:
for media in tweet.media:
url = media['media_url_https']
if url.endswith('.jpg'):
url = url.replace('.jpg', '?format=jpg&name=orig')
clean_url = get_clean_url(url)
save_path = os.path.join(save_folder, f"{screen_name}_{clean_url.split('/')[-1]}.jpeg")
await download_image(url, save_path)
PNG-এর ছবির গুণমান ভালো, কিন্তু সম্ভবত শুধুমাত্র PNG হিসাবে আপলোড করা ছবিগুলিই বিদ্যমান? এছাড়াও, PNGগুলি অনেক জায়গা নেয়, তাই আমি JPG-এর সাথে আপস করেছি।
প্রাপ্ত প্রতিটি ID-এর জন্য ফোল্ডার তৈরি করা হয় এবং সেখানে ছবিগুলি সংরক্ষণ করা হয়। ছবিগুলিতেও ID বরাদ্দ করা হয়, যা একটি চিন্তাশীল বৈশিষ্ট্য যা জাপানিরাও প্রশংসা করবে।
বর্তমানে, আমি অন্য কোনো অনুরূপ স্ক্রিপ্ট খুঁজে পাইনি, তাই আমি এটি প্রকাশ করার সিদ্ধান্ত নিয়েছি। অথবা বরং, লোকেরা সম্ভবত সেগুলি প্রকাশ করতে চায় না কারণ সেগুলি সাধারণত গোপনে করা হয়...
যাইহোক, যেহেতু fav.log-এ লাইক করা পোস্টগুলির URL রয়েছে, যদি আপনি শুধুমাত্র লাইক করা পোস্টগুলি থেকে ছবি সংরক্ষণ করতে চান, তবে আপনাকে এটি আলাদাভাবে করতে হবে, তবে এটি সম্ভব। এই কারণেই আমি সবকিছু fav.log-এ রাখছি।
আসলে, আমি ভেবেছিলাম fav.log এবং সমস্ত টুইট আনার সময়কার লগ আলাদা করা ভালো হবে, কিন্তু আমি এখন ক্লান্ত, তাই আমি এখানেই শেষ করব।
এই পর্যন্তই।
আবার দেখা হবে।