উইকিবইয়ের ব্যবহার/স্ক্রিপ্টিং ও মিডিয়াউইকি এপিআই
যদিও এই বিভাগটি প্রশাসকদের জন্য সবচেয়ে কার্যকর, যে কোনও ব্যবহারকারী মিডিয়াউইকি এপিআই ব্যবহার করতে পারেন, এবং তাই এই বিভাগটি যে কোনও উইকিবুকিয়ানকে উপকৃত করবে।
মিডিয়াউইকি এপিআই
[সম্পাদনা]মিডিয়াউইকি একটি শক্তিশালী এপিআই সরঞ্জাম সরবরাহ করে যা আপনাকে কার্যত ওই সকল কাজ করতে সক্ষম করে যা আপনি উইকিতে এপিআই কল ব্যবহার করে করতে পারেন। নিচের উদাহরণটি লক্ষ্য করুন:
https://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Pet_door&rvslots=*&rvprop=content&formatversion=2
আপনার ওয়েব ব্রাউজারে এটি পরীক্ষা করে দেখুন। আপনি একটি পৃষ্ঠা পাবেন যা দেখতে এরকম হবে:
মিডিয়াউইকি এপিআই ফলাফল
এটি জেএসওএন বিন্যাসের এইচটিএমএল উপস্থাপনা। এইচটিএমএল ডিবাগিংয়ের জন্য ভাল, কিন্তু অ্যাপ্লিকেশন ব্যবহারের জন্য অনুপযুক্ত।
আউটপুট বিন্যাস পরিবর্তন করতে বিন্যাস পরিমিতি নির্দিষ্ট করুন। জেএসওএন বিন্যাসের নন-এইচটিএমএল উপস্থাপনা দেখতে, format=json নির্ধারণ করুন।
আরও তথ্যের জন্য সম্পূর্ণ দলিল বা এপিআই সাহায্য দেখুন।
এছাড়া থাকবে এক গুচ্ছ জেসন (জেএসওএন) পাঠ্য, যার মধ্যে রয়েছে "পেট ডোর" শিরোনামের বিষয়বস্তু।
এটা কিভাবে সাহায্য করে? আসলে, আপনি যদি ১০০টি নিবন্ধের বিশদ বিবরণ পেতে চান, তাহলে আপনাকে ম্যানুয়ালি সেগুলির সবগুলিতে যেতে হবে না! শুধু একটি সাধারণ ব্যাশ স্ক্রিপ্ট ব্যবহার করলেই হবে যা আপনার জন্য এই কাজটি করে দেবে।
স্ক্রিপ্টিং
[সম্পাদনা]এখন, এটি কীভাবে একজন উইকিবই প্রশাসকের ক্ষেত্রে প্রযোজ্য? ধরুন আপনি একটি বড় অপসারণ অনুরোধ নিয়ে কাজ করছেন। যদি ৫০০ টি পৃষ্ঠা থাকে, তবে প্রতিটি পৃষ্ঠা ম্যানুয়ালি মুছে ফেলতে কয়েক ঘন্টা সময় লাগতে পারে এবং আপনার জন্য হতাশার কারণ হতে পারে! পরিবর্তে, একটি পাইথন ৩ স্ক্রিপ্ট ব্যবহার করুন! MediaWiki.org এ মিডিয়াউইকি এপিআই পৃষ্ঠায় এই জাতীয় সমস্ত এপিআই কলগুলির একটি তালিকা রয়েছে এবং এতে সহায়ক উদাহরণ কোড রয়েছে যা থেকে এই পৃষ্ঠার কোডটি উদ্ভূত হয়েছিল।
প্রথমত, স্ক্রিপ্ট। যা এখানে দেওয়া হচ্ছে। টীকাগুলি কী ঘটছে তা ব্যাখ্যা করে।
import requests # প্রয়োজনীয় মডিউলগুলি আমদানি করুন
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
}
সম্ভাবনা খুব কম হলেও, এই ধরনের স্ক্রিপ্টগুলি চালানোর সময় রেটলিমিট সমস্যার সম্মুখীন হওয়া সম্ভব। সেক্ষেত্রে, আপনি যদি এখনও পর্যালোচক না হন, তাহলে সেরা পছন্দ হবে একজন পর্যালোচক হওয়া।