উইকিবইয়ের ব্যবহার/স্ক্রিপ্টিং ও মিডিয়াউইকি এপিআই
যদিও এই বিভাগটি প্রশাসকদের জন্য সবচেয়ে উপযোগী, তবে যেকোনো ব্যবহারকারী মিডিয়াউইকি এপিআই ব্যবহার করতে পারে তাই এই বিভাগটি যেকোনো উইকিবুকিয়ানকে উপকৃত করবে।
মিডিয়াউইকি এপিআই[সম্পাদনা]
মিডিয়াউইকি একটি শক্তিশালী এপিআই সরঞ্জাম সরবরাহ করে যা কার্যত যেকোনো কাজ সম্পাদন করতে দেয় যা আপনি এপিআই কল ব্যবহার করে উইকিতে করতে পারেন। নিম্নলিখিত উদাহরণ বিবেচনা করুন:
https://bn.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Pet_door&rvslots=*&rvprop=content&formatversion=2
আপনার ওয়েব ব্রাউজারে এটি দিয়ে পৃষ্ঠাটিতে যান। আপনি এমন দেখতে একটি পৃষ্ঠা পাবেন:
মিডিয়াউইকি এপিআই ফলাফল
এটি জেএসওএন বিন্যাসের এইচটিএমএল উপস্থাপনা। এইচটিএমএল ডিবাগিংয়ের জন্য ভাল, কিন্তু অ্যাপ্লিকেশন ব্যবহারের জন্য অনুপযুক্ত।
আউটপুট বিন্যাস পরিবর্তন করতে বিন্যাস পরিমিতি নির্দিষ্ট করুন। জেএসওএন বিন্যাসের নন-এইচটিএমএল উপস্থাপনা দেখতে, format=json সেট করুন।
আরও তথ্যের জন্য সম্পূর্ণ নথিপত্র বা এপিআই সাহায্য দেখুন।
এবং জেএসওএন লেখার একটি গুচ্ছ পাবেন, যাতে "পেট ডোর" শিরোনামের লেখা রয়েছে। আপনি যদি ১০০টি নিবন্ধের তথ্য পেতে চান তবে আপনাকে সেগুলো একটা একটা করে দেখতে হবে না! শুধু একটি সাধারণ ব্যাশ স্ক্রিপ্ট ব্যবহার করুন যা আপনার জন্য এই কাজটি করবে।
স্ক্রিপ্টিং[সম্পাদনা]
এখন, এটি কিভাবে একজন উইকিবই প্রশাসকের ক্ষেত্রে প্রযোজ্য? ধরুন আপনি একটি বড় মোছার অনুরোধ এ কাজ করছেন। যদি ৫০০টি পৃষ্ঠা থাকে, তাহলে এক এক করে প্রতিটি পৃষ্ঠা মুছে ফেলতে কয়েক ঘন্টা সময় লাগতে পারে এবং আপনার হতাশ লাগতে পারে! এর পরিবর্তে, একটি পাইথন ৩ স্ক্রিপ্ট ব্যবহার করুন! MediaWiki.org-এর মিডিয়াউইকি এপিআই পৃষ্ঠায় এই ধরনের সমস্ত এপিআই কলের একটি তালিকা রয়েছে এবং এতে সহায়ক উদাহরণ কোড রয়েছে যেখান থেকে এই পৃষ্ঠার কোডটি নেওয়া হয়েছে।
প্রথমত, স্ক্রিপ্ট। এখানে দেওয়া হল। টীকাগুলো কী ঘটছে তা ব্যাখ্যা করে৷
প্রয়োজনীয় মডিউল আমদানি করুন
S = requests.Session()
URL = "https://en.wikibooks.org/w/api.php" # উইকিবুকের জন্য এপিআই অবস্থান
file_object = open("pages_to_delete.txt", "r", encoding="utf-8") # এনকোডিং-এ ফাইলটি খুলুন (অন্যথায় অ্যাকসেন্ট এবং নন-ল্যাটিন অক্ষরসহ ফাইলগুলো কাজ নাও করতে পারে)
f1 = file_object.readlines()
ধাপ ১: একটি লগইন টোকেন পুনরুদ্ধার করুন
PARAMS_1 = {
"action": "query",
"meta": "tokens",
"type": "login",
"format": "json"
}
R = S.get(url=URL, params=PARAMS_1)
DATA = R.json()
LOGIN_TOKEN = DATA['query']['tokens']['logintoken']
# ধাপ ২: লগইন করার জন্য একটি পোস্টের অনুরোধ পাঠান।
# Special:BotPasswords এর মাধ্যমে BOT_USERNAME & BOT_PASSWORDS এর জন্য ক্রেডেনশিয়াল পেতে পারেন
# (https://www.mediawiki.org/wiki/Special:BotPasswords)
# আপনাকে নিশ্চিত করতে হবে যে বট ব্যবহারকারীর কাজটি সম্পাদন করার জন্য প্রয়োজনীয় অধিকার রয়েছে
PARAMS_2 = {
"action": "login",
"lgname": "BOT_USERNAME",
"lgpassword": "BOT_PASSWORD",
"lgtoken": LOGIN_TOKEN,
"format": "json"
}
R = S.post(URL, data=PARAMS_2)
# ধাপ ৩: লগ ইন করার সময়, একটি সিএসআরএফ টোকেন পান
PARAMS_3 = {
"action": "query",
"meta": "tokens",
"format": "json"
}
R = S.get(url=URL, params=PARAMS_3)
DATA = R.json()
CSRF_TOKEN = DATA["query"]["tokens"]["csrftoken"]
# ধাপ ৪: প্রতিটি পৃষ্ঠা মুছে ফেলার জন্য একটি পোস্ট অনুরোধ পাঠান
for x in f1:
# আপনি যা করছেন তার উপর নির্ভর করে - আপনাকে স্ক্রিপ্টটি কিছুটা পরিবর্তন করতে হতে পারে
if ("Pinyin" not in x):
continue
# সম্ভাব্য খালি স্থানগুলো সরান
if (x.isalnum() == False):
xx = x.rstrip(x[-1])
else:
xx = x
print(xx)
# উইকিবইকে মুছে ফেলতে বলুন!
PARAMS_4 = {
'action':"delete",
'title':xx,
'token':CSRF_TOKEN,
'format':"json"
}
R = S.post(URL, data=PARAMS_4)
DATA = R.json()
print(DATA)
print("done")
তাহলে আপনি কিভাবে এটি ব্যবহার করবেন? এটিকে একটি পাইথন ফাইলে রাখুন, pages_to_delete.txt
-এ মুছে ফেলার জন্য সমস্ত পৃষ্ঠা রাখুন এবং এটি চালান। আউটপুট দেখুন - যদি ত্রুটি থাকে, মিডিয়াউইকি আপনাকে জানাবে। সাধারণ সমস্যাগুলোর মধ্যে অন্তর্ভুক্ত:
- অনুরোধ মডিউল খুঁজে পাচ্ছেন না -
pip
এটি ব্যবহার করে ইনস্টল করুন - স্ক্রিপ্ট খাপ হচ্ছে না। উদাহরণস্বরূপ, আপনি যদি মুছে ফেলা না করে থাকেন, তাহলে আপনি নতুন পৃষ্ঠাগুলোকে পুরানোগুলো থেকে আলাদা জায়গায় রাখতে চাইতে পারেন৷ নিশ্চিত করুন যে তারা প্রত্যাশা হিসেবে কাজ করে! আপনি প্রথমে একটি পরীক্ষা চালাতে চাইতে পারেন।
আপনি যদি কোনো সময়ে আটকে যান, তবে WB:RR-এ জিজ্ঞাসা করুন।
এখন, এটি সহজেই করা যায়। ধরুন মুছে ফেলার পরিবর্তে, আপনি এই পৃষ্ঠাগুলো মুছে ফেলা না করতে চান। তারপর যা প্রয়োজন তা হল PARAMS_4
কে নিন্মের সাথে প্রতিস্থাপন করা:
PARAMS_4 = {
"action": "undelete",
"format": "json",
"token": CSRF_TOKEN,
"title": xx,
"reason": "per [[WB:RFU]]"
}
এমনকি অ-প্রশাসকগণও স্ক্রিপ্ট ব্যবহার করে উপকৃত হতে পারেন। ধরুন আপনি অনেকগুলো পৃষ্ঠা সরানোর চেষ্টা করছেন। সেক্ষেত্রে, PARAMS_4
টি পরিবর্তন করুন:
PARAMS_4 = {
"action": "move",
"format": "json",
"from": "Current title",
"to": "Page with new title",
"reason": "Typo",
"movetalk": "1", # সংশ্লিষ্ট আলাপ পাতা সরান
"noredirect": "1", # সরানোর সময় পুনঃনির্দেশ দমন করুন (শুধু পর্যালোচকদের জন্য উপলব্ধ এবং উচ্চতর)
"token": CSRF_TOKEN
}
যদিও সম্ভাবনা কম, তবে এই ধরনের স্ক্রিপ্ট চালানোর সময় রেটলিমিট সমস্যায় পড়তে পারেন। সেক্ষেত্রে, আপনি যদি এখনও একজন পর্যবেক্ষক না হন, তাহলে সবচেয়ে ভালো পছন্দ হবে একজন পর্যবেক্ষক হয়ে উঠা।