راهنما:استخراج آمار از پایگاه داده مدیاویکی
دریافت اطلاعات از ویکیپدیا به دو روش انجام میشود:
- دریافت اطلاعات از دیتابیس که توسط اشتراک تولسرور یا دانلود دیتابیس ویکیپدیا مقدور است.
- دریافت اطلاعات از نرمافزار مدیاویکی توسط API:Query که از طریق پنجرهٔ نشانی (URL BAR) مرورگرها مقدور میباشد.
این راهنما برای استخراج اطلاعات به روش اول طراحی شدهاست. برای استخراج آمار و اطلاعات به روش دوم، ویکیپدیا:استخراج آمار از مدیاویکی را مطالعه نمائید.
مقدمه
[ویرایش]در ابتدا برای آشنایی با رباتها و فعالسازی حساب تولسرور شروع کار با ربات پایتون و شروع کار با تولسرور را مطالعه نمایید.
تولسرور به مجموعه کامپیوترهایی گفته میشود که ویکیپدیا بر روی آنها ذخیره و پردازش میگردد این کامپیوترها علاوه بر ویکیپدیا به کاربرهای حرفهای خدمات و اشتراکهایی میدهند تا آنها نیز بتوانند در پیشبرد پروژه ویکیپدیا و بنیاد ویکیمدیا کمک کنند.
MySql
[ویرایش]دیتابیس تولسرور بر پایه نرمافزار Mysql بنا شدهاست. برای استفاده از اطلاعات این دیتابیس نیاز به دانستن زبان Mysql و همچنین داشتن حساب کاربری در تولسرور است.
اتصال به دیتابیس تول سرور با حساب کاربری
[ویرایش]- برای آشنایی با دیتابیس تولسرور به این نشانی مراجعه نمایید.
ابزار کوئریگیری
[ویرایش]اگر حسابی در آزمایشگاه لبز ندارید میتوانید از این ابزار برای گرفتن کوئریهای زیر استفاده کنید.
- روش کار
- به سامانه به کمک حساب کاربریتان در وبگاه مدیاویکی وارد شوید.
- در بخش کوئری در ابتدا متن زیر و پس از آن کوئریهایی که در پائین هستند یا کوئری مورد نظر خودتان را بنویسد و در نهایت نتیجهٔ کوئری را با پسوند مورد نظرتان دانلود کنید.
USE fawiki_p;
- نکته ۱
در متن بالا به ابزار میگویید از کدام دیتابیس استفاده کند مثلا برای
- ویکی انگلیسی
USE enwiki_p;
- ویکیانبار
USE commonswiki_p;
- ویکیواژه فارسی
USE fawiktionary_p;
- نکته ۲
برای کوئریهای دیگر میتوانید از اینجا موارد دیگر را مشاهده کنید.
معرفی tableهای موجود در تولسرور
[ویرایش]برای اطلاع از table های تول سرور به این نشانی مراجعه نمایید.
استخراج آمار یا Queries
[ویرایش]برای مشاهده کدهای کاربردی به این نشانی مراجعه نمایید.
بهینهسازی کوئری
[ویرایش]برای بهینه کردن کوئری و افزایش سرعت موارد زیر، تاثیرگذارند:
- قرار دادن شرط بعد از join on به جای where
select page_title
from page
join revision on page_id = rev_page
where
page_title not like '%/%'
and page_namespace = 10
and page_is_redirect = 0
بشود:
select page_title
from page
join revision on page_id = rev_page and page_title not like '%/%' and page_namespace = 10 and page_is_redirect = 0
- کوچک کردن table به کمک شرطهایی مانند بازه زمانی، فضای نام و...
کوئریگیری از سرور
[ویرایش]برای کوئری گرفتن از توللبز یا تولسرور و ذخیره آن در فایل متنی result.txt به روش زیر عمل کنید:
sql fawiki < oursql.sql > result.txt
- نکته۱
مثال فوق برای ویکیفا است برای انگلیسی enwiki_p و برای دیگر ویکیها به همین نحو.
- نکته۲
در مثال فوق oursql.sql نام فایل متنی است که کد اسکیوال در آن ذخیره شدهاست مانند کدهایی که در بخش بعدی مشاهده میکنید.
- کوئری با jsub
jsub -l release=trusty -once -N foo_sql -mem 1g -o result.txt -i /data/project/Yourbot/oursql.sql sql fawiki_p
کوئریگیری با استفاده از ربات
[ویرایش]اگر دارای حسابی در لبز باشید، با استفاده از ربات آمارگیر میتوانید کل پروسهٔ استخراج آمار از پایگاه داده و ذخیرهٔ آن در ویکیپدیا را یکجا و به سادگی انجام دهید. به عنوان مثال، برای گرفتن فهرست همهٔ مقالههایی که در عنوانشان واژهٔ «کتاب» وجود دارد، و ذخیره کردن نتیجهٔ آن در ویکیپدیا:گزارش دیتابیس/مقالههای کتاب
میتوانید دستور زیر را (پس از افزودن کد ربات به شاخهٔ scripts رباتتان) اجرا کنید:
python pwb.py stats -sql:"SELECT page_title FROM page WHERE page_namespace = 0 AND page_is_redirect = 0 AND page_title LIKE '%_کتاب_%'" -out:"ویکیپدیا:گزارش دیتابیس/مقالههای کتاب" -cols:"عنوان" -summary:"به روز کردن آمار مقالههای کتاب"
این دستور فهرست را از پایگاه داده گرفته و نتیجه را به صورت جدولی در صفحهٔ یادشده ذخیره خواهد کرد.
قالب خروجی
[ویرایش]کد ربات آمار اجازه میدهد که شما قالب (فرمت) خروجی را تعیین کنید. برای مثال به دستور زیر نگاه کنید:
python ~/core/pwb.py stats -sql:"SELECT page_id, page_namespace, page_title FROM page ORDER BY page_id DESC LIMIT 10" -out:"وپ:گودال" -cols:"شناسه,عنوان" -summary:"آزمایش ربات آمار" -frmt:"| {{formatnum:%s}} || [[{{ns:%s}}:%s]]"
خروجی کوئری بالا سه ستون دارد (page_id و page_namespace و page_title). پارامتر frmt مشخص میکند که این سه باید به این شکل استفاده شوند: | %s || [[الگو:Ns:%s:%s]]
نویسهٔ اول (|) برای شروع ردیف در جدول است. در ادامه با استفاده از formatnum رشتهٔ اولی (که شناسهٔ صفحه یا page_id است) با ارقام فارسی نمایش مییابد، و بعد با استفاده از دستور ns و پارامتر دوم (که شمارهٔ فضای نام صفحه است) پیشوند مناسب (نظیر [[الگو:
یا [[بحث کاربر
) قبل از نام صفحه اضافه میشود و بعد پارامتر سوم که عنوان صفحهاست نمایش میباید. محصول کار چیزی شبیه به | {{formatnum:3425175}} || [[{{ns:10}}:Chinese_name/توضیحات]]
خواهد بود که به صورت ردیفی از جدول مانند زیر نمایش میباید:
۳٬۴۲۵٬۱۷۵ | الگو:Chinese_name/توضیحات |
اجرای دورهای
[ویرایش]برای آن که آمارها به صورت دورهای (مثلاً هفتهای یک بار) به روز شوند، میتوان از کرون جاب استفاده کرد. در لبز از رویکرد رایانش مشبک برای اجرای این قبیل کارها استفاده میشود به این شکل که ابتدا با دستور jsub کار را فرا میخوانید و بعد این دستور jsub را به crontab میدهید تا در بازههای زمانی مشخص اجرا کند. توضیحات بیشتر در wikitech:Help:Tool_Labs/Grid#Scheduling_jobs_at_regular_intervals_with_cron آمدهاست.
مشکل رویکرد بالا آن است که دست کم در حال حاضر، jsub قادر نیست پارامترهایی که متن یونیکد دارند را به درستی پردازش کند. اگر بخواهید ربات stats.py را مستقیماً، یا حتی از درون یک اسکریپت پوسته، فراخوانی بکنید میبایست پارامترهایی نظیر اسم صفحهٔ خروجی (out) را به آن بدهید که معمولاً حاوی نویسههای یونیکد هستند. لذا این روش به طور مستقیم (مثلاً از طریق jsub python .../pwb.py stats -out:"..." ...
) قابل اجرا نیست.
از آنجا که ربات آمارگیر به صورت ماژول طراحی شده، شما میتوانید به سادگی این مشکل را با ایجاد یک ماژول دیگر حل کنید. در زیر کد یک ماژول به اسم weekly را میبینید که ابتدا ماژول stats را فرا میخواند، پارامترهای دلخواه را به آن میدهد، و سپس آن را اجرا میکند.
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
weekly.py - a wrapper for stats.py to be called every week.
usage:
python pwb.py weekly
"""
#
# (C) Pywikibot team, 2006-2014
# (C) w:fa:User:Huji, 2015
#
# Distributed under the terms of the MIT license.
#
from __future__ import unicode_literals
#
import pywikibot
from scripts import stats
def main():
sql = "SELECT page_id, page_namespace, page_title from page limit 20"
out = 'User:Huji/sandbox'
cols = [u'شناسه', u'صفحه']
summary = 'Weekly bot test'
pref = ''
frmt = '| %s || [[{{ns:%s}}%s]]'
bot = stats.StatsBot(sql, out, cols, summary, pref, frmt)
bot.run()
if __name__ == "__main__":
main()
وقتی این ماژول را در scripts/weekly.py ذخیره کردید میتوانید دستور python foo/bar/pwb.py weekly
را در یک اسکریپت پوسته (مثلاً به اسم weekly.sh) ذخیره کنید و بعد وظیفه را با استفاده از دستوری نظیر jsub -once -mem 1g -o ~/err/weekly.out -e ~/err/weekly.err weekly.sh
تعریف کنید. حال این وظیفه میتواند از طریق کرون جاب به صورت هفتگی تعریف بشود.
پس به طور خلاصه: هر هفته کرون دستور jsub را اجرا میکند، دستور jsub اسکریپت weekly.sh را اجرا میکند و به آن مقدار مناسب حافظه تخصیص میدهد، اسکریپت weekly.sh به نوبهٔ خود ماژول weekly.py را صدا میکند که آن هم به نوبهٔ خود، یک یا چند بار ربات آمارگیر stats.py را با پارامترهای مناسب فرا میخواند. در انتهای این پروسه تمام آمارهای هفتگی (که در weekly.py تعریف کردهاید) به روز خواهند شد.
نمونه کوئریها
[ویرایش]برای آشنایی با تعدادی از کدهای اسکیوال و همچنین دستورهای کاربردی در خط فرمان تولسرور به این نشانی مراجعه نمایید.
مقالهها
[ویرایش]مقالههایی که عنوانشان حاوی واژهٔ خاصی است
[ویرایش]فهرست ۵۰۰ مقالهای که در نام آنها عبارت کتاب هست برای رده باید page_namespace = 14 قرار داد.
SELECT page_title
FROM page
WHERE page_namespace = 0
AND page_is_redirect = 0
AND page_title LIKE "%_کتاب_%" LIMIT 500;
تعداد ویرایشهای مشکوک به خرابکاری (واگردانی + گزینهٔ ویرایش خرابکارانهٔ ابزارها)
[ویرایش]مواردی که شامل وپ:خرابکاری است.
USE fawiki_p;
SELECT page_title, rev_user_text, comment_text, rev_timestamp
FROM revision JOIN page join comment ON rev_page=page_id and rev_comment_id=comment_id
WHERE page_namespace = 0
AND (
comment_text LIKE 'ویرایش%به_آخرین_تغییری_که%انجام_داده_بود%'
OR comment_text LIKE '%خرابکاری%خنثیسازی%وپ:توینکل%'
OR comment_text LIKE '%خرابکاری%خنثیسازی%وپ:تل%'
OR comment_text LIKE '%خنثیسازی%به_آخرین_نسخهٔ%وپ:توینکل%'
OR comment_text LIKE '%خنثیسازی%به_آخرین_نسخهٔ%وپ:تل%'
OR comment_text LIKE '%ویرایش%خرابکارانهٔ%به_آخرین_ویرایش%'
OR comment_text LIKE '%ویرایش%خرابکارانهٔ%بحث%واگردانی_شد%'
OR comment_text LIKE '%خرابکاری%به_نسخهٔ%واگردانده_شد.%'
)
AND NOW() - INTERVAL 24 HOUR < rev_timestamp;
تعداد برگرداندن مقاله با فرض حسن نیت
[ویرایش]- مواردی که کاربر حسن نیت داشته.
USE fawiki_p;
SELECT page_title, rev_user_text, comment_text, rev_timestamp
FROM revision JOIN page join comment ON rev_page=page_id and comment_text_id=comment_id
WHERE page_namespace = 0
AND (
comment_text LIKE '%خنثیسازی_ویرایش%توسط%'
OR comment_text LIKE '%ویرایش%به_وسیلهٔ_[[ویکیپدیا:تفاوت_سریع|تفاوت_سریع]]_خنثی_شد.%'
OR comment_text LIKE '%آخرین_تغییر_متن_رد_شد%و_برگردانده_شد_به_نسخهٔ%'
OR comment_text LIKE '%تغییر_آخر_متن_رد_شد%و_برگردانده_شد_به_نسخهٔ%'
OR comment_text LIKE '%آخرین%تغییر_متن_رد_شد_و_برگردانده_شد_به_نسخهٔ%'
OR comment_text LIKE '%خنثیسازی%وپ:توینکل%'
OR comment_text LIKE '%خنثیسازی%وپ:تل%'
OR comment_text LIKE '%برگردانده%وپ:توینکل%'
OR comment_text LIKE '%برگردانده%وپ:تل%'
OR comment_text LIKE '%به_نسخهٔ%ویرایش%واگردانده_شد%وپ:توینکل%'
OR comment_text LIKE '%به_نسخهٔ%ویرایش%واگردانده_شد%وپ:تل%'
OR comment_text LIKE '%با_فرض_حسن_نیت%ویرایش%'
OR comment_text LIKE '%ویرایشهای%با_فرض_حسن_نیت%خنثیسازی_شد%'
OR comment_text LIKE '%ویرایش%بحث%خنثیسازی_شد:%'
OR comment_text LIKE '%ویرایش%بحث%واگردانی_شد%'
OR comment_text LIKE '%ویرایشهای%با_فرض_حسن_نیت%واگردانده_شد%'
OR comment_text LIKE '%واگردانی_به_نسخهٔ%وپ:توینکل%'
OR comment_text LIKE '%واگردانی%ویرایش%وپ:توینکل%'
OR comment_text LIKE '%تغییرات%به_نسخهٔ%واگردانده_شد%'
OR comment_text LIKE '%واگردانی_به_نسخهٔ%تاریخ%توسط%'
OR comment_text LIKE '%واگردانی_ویرایشهای%وپ:هاگ%'
OR comment_text LIKE '%برگرداندن_ویرایشهای%وپ:هاگ%'
)
AND (
comment_text NOT LIKE '%خرابکاری%خنثیسازی%وپ:توینکل%'
AND comment_text NOT LIKE '%خرابکاری%خنثیسازی%وپ:تل%'
AND comment_text NOT LIKE '%خنثیسازی%به_آخرین_نسخهٔ%وپ:توینکل%'
AND comment_text NOT LIKE '%خنثیسازی%به_آخرین_نسخهٔ%وپ:تل%'
AND comment_text NOT LIKE '%ویرایش%خرابکارانهٔ%بحث_کاربر:%واگردانی_شد%'
)
AND NOW() - INTERVAL 24 HOUR < rev_timestamp;
تعداد ویرایشهای آسیب زننده (مجموع ۲ حالت بالا)
[ویرایش]ویرایشهای آسیبزننده مواردی که عمدی یا سهوی ویرایشی انجام شده که نباید در مقاله باشد و منظور صرفاً وپ:خرابکاری نیست.
USE fawiki_p;
SELECT page_title, rev_user_text, comment_text, rev_timestamp
FROM revision JOIN page join comment ON rev_page=page_id and rev_comment_id=comment_id
WHERE page_namespace = 0
AND (
comment_text LIKE '%خنثیسازی_ویرایش%توسط%'
OR comment_text LIKE '%ویرایش%به_وسیلهٔ_[[ویکیپدیا:تفاوت_سریع|تفاوت_سریع]]_خنثی_شد.%'
OR comment_text LIKE '%آخرین_تغییر_متن_رد_شد%و_برگردانده_شد_به_نسخهٔ%'
OR comment_text LIKE '%تغییر_آخر_متن_رد_شد%و_برگردانده_شد_به_نسخهٔ%'
OR comment_text LIKE '%آخرین%تغییر_متن_رد_شد_و_برگردانده_شد_به_نسخهٔ%'
OR comment_text LIKE '%خنثیسازی%وپ:توینکل%'
OR comment_text LIKE '%خنثیسازی%وپ:تل%'
OR comment_text LIKE '%برگردانده%وپ:توینکل%'
OR comment_text LIKE '%برگردانده%وپ:تل%'
OR comment_text LIKE '%به_نسخهٔ%ویرایش%واگردانده_شد%وپ:توینکل%'
OR comment_text LIKE '%به_نسخهٔ%ویرایش%واگردانده_شد%وپ:تل%'
OR comment_text LIKE '%با_فرض_حسن_نیت%ویرایش%'
OR comment_text LIKE '%ویرایشهای%با_فرض_حسن_نیت%خنثیسازی_شد%'
OR comment_text LIKE '%ویرایش%بحث%خنثیسازی_شد:%'
OR comment_text LIKE '%ویرایش%بحث%واگردانی_شد%'
OR comment_text LIKE '%ویرایشهای%با_فرض_حسن_نیت%واگردانده_شد%'
OR comment_text LIKE '%واگردانی_به_نسخهٔ%وپ:توینکل%'
OR comment_text LIKE '%واگردانی%ویرایش%وپ:توینکل%'
OR comment_text LIKE '%تغییرات%به_نسخهٔ%واگردانده_شد%'
OR comment_text LIKE '%واگردانی_به_نسخهٔ%تاریخ%توسط%'
OR comment_text LIKE '%واگردانی_ویرایشهای%وپ:هاگ%'
OR comment_text LIKE '%برگرداندن_ویرایشهای%وپ:هاگ%'
OR comment_text LIKE 'ویرایش%به_آخرین_تغییری_که%انجام_داده_بود%'
OR comment_text LIKE '%خرابکاری%خنثیسازی%وپ:توینکل%'
OR comment_text LIKE '%خرابکاری%خنثیسازی%وپ:تل%'
OR comment_text LIKE '%خنثیسازی%به_آخرین_نسخهٔ%وپ:توینکل%'
OR comment_text LIKE '%خنثیسازی%به_آخرین_نسخهٔ%وپ:تل%'
OR comment_text LIKE '%ویرایش%خرابکارانهٔ%به_آخرین_ویرایش%'
OR comment_text LIKE '%ویرایش%خرابکارانهٔ%بحث%واگردانی_شد%'
OR comment_text LIKE '%خرابکاری%به_نسخهٔ%واگردانده_شد.%'
)
AND NOW() - INTERVAL 24 HOUR < rev_timestamp;
مقالات گشت زده شده در ۲۴ ساعت اخیر
[ویرایش]USE fawiki_p;
SELECT distinct log_title
FROM actor JOIN logging ON log_actor = actor_id LEFT JOIN user_groups ON log_actor = ug_user AND ug_group = 'bot'
WHERE log_type ='patrol'
AND log_action='patrol'
AND (
log_params LIKE '%auto";i:0;}'
OR log_params LIKE '%0'
)
AND log_title IN (
SELECT page_title
FROM page
WHERE page_namespace = 0
)
AND ug_group IS NULL
AND NOW() - INTERVAL 1 DAY <log_timestamp
GROUP BY log_title;
--AND CURRENT_TIMESTAMP - log_timestamp < 00000001000000;
/*AND log_timestamp > '20140101000000'
AND log_timestamp < '20171028000000';*/
مقاله گشتزده شده و آیدی نسخه ویرایش
[ویرایش]USE fawiki_p;
SELECT log_title, REGEXP_SUBSTR (REGEXP_SUBSTR (log_params,'s:8:"4::curid";s:8:"([0-9]+)"') ,'[0-9]{3,}' ) ,log_params,actor_name
FROM actor JOIN logging ON log_actor = actor_id Join revision on log_page=rev_page LEFT JOIN user_groups ON log_actor = ug_user AND ug_group = 'bot'
WHERE log_type ='patrol'
AND log_action='patrol'
AND (
log_params LIKE '%auto";i:0;}'
OR log_params LIKE '%0'
)
AND log_title IN (
SELECT page_title
FROM page
WHERE page_namespace = 0
)
AND ug_group IS NULL
AND NOW() - INTERVAL 1 DAY <log_timestamp
GROUP BY log_title;
مقالات بر پایهٔ تعداد واگردانی یا خنثیسازی
[ویرایش]USE fawiki_p;
SELECT page_title, count(comment_text)
FROM revision join page join comment ON rev_page=page_id and comment_text_id=comment_id
WHERE page_id=rev_page and page_namespace=0
and (comment_text LIKE '%واگردان%' or comment_text LIKE '%خنثی%') GROUP BY page_title ORDER BY count(comment_text) DESC limit 20000;
مقالاتی که در عنوانشان عدد لاتین باشد
[ویرایش]SELECT page_title
FROM page
WHERE page_namespace = 0
AND page_is_redirect = 0
AND (
(page_title LIKE "%1%")
OR (page_title LIKE "%2%")
OR (page_title LIKE "%3%")
OR (page_title LIKE "%4%")
OR (page_title LIKE "%5%")
OR (page_title LIKE "%6%")
OR (page_title LIKE "%7%")
OR (page_title LIKE "%8%")
OR (page_title LIKE "%9%")
OR (page_title LIKE "%0%")
);
مقالههایی که هیچ ویکیپیوندی دریافت نکردهاند
[ویرایش]مقالههایی که هیچ پیوندی ندارند و از نظر تعداد ویکیپدیا آنها را به عنوان مقاله درنظر نمیگیرد!
SELECT page_title
FROM page
LEFT JOIN pagelinks ON pl_from = page_id
WHERE page_namespace = 0
AND page_is_redirect = 0
AND pl_namespace IS NULL
GROUP BY page_id;
مقالات دارای میانویکی به فضای نام متفاوت
[ویرایش]مقالاتی که میانویکیشان به فضای نام دیگری است!
SELECT /*SLOW OK */ page_title,
page_namespace,
ll_title
FROM page
INNER JOIN langlinks ON page_id = ll_from
WHERE page_namespace = 0
AND page_is_redirect = 0
AND ll_lang = 'en'
AND (
(ll_title LIKE "%Template:%")
OR (ll_title LIKE "%Category:%")
OR (ll_title LIKE "%Wikipedia:%")
OR (ll_title LIKE "%Portal:%")
OR (ll_title LIKE "%User:%")
OR (ll_title LIKE "%talk:%")
OR (ll_title LIKE "%Talk:%")
)
GROUP BY page_id;
مقالات موجود در ویکیپدیای عربی که در ویکیفا نیستند
[ویرایش]مقالاتی که در ویکیپدیای عربی موجودند در ویکیفا نیستند. این کد باید بر روی arwiki_p رانده شود.
SELECT CONCAT (
":",
page_title,
"]]||",
count(*),
"||",
page_len
)
FROM langlinks
INNER JOIN page ON ll_from = page_id
WHERE page_namespace = 0
AND page_is_redirect = 0
AND NOT EXISTS (
SELECT *
FROM langlinks AS t
WHERE t.ll_lang = "fa"
AND t.ll_from = langlinks.ll_from
)
GROUP BY ll_from
ORDER BY count(*) DESC,
page_title limit 2000;
مقالههای فیلم ویکی انگلیسی با بیش از ۲۰ میانویکی که در ویکیفا نیستند
[ویرایش]کوئری فیلمهای ناموجود در ویکیپدیای فارسی دارای بیش از ۲۰ میانویکی برای اجرا در دیتابیس ویکیپدیای انگلیسی
SELECT /*SLOW OK*/ page_title
FROM page
WHERE page_id IN (
SELECT tl_from
FROM templatelinks
JOIN linktarget on tl_target_id = lt_id
WHERE lt_title = "Infobox_film"
AND lt_namespace = 10
AND tl_from IN (
SELECT ll_from
FROM langlinks
WHERE ll_from
GROUP BY ll_from
HAVING COUNT(*) > 20
)
AND tl_from NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang = "fa"
)
);
مقالههای دارای نویسهٔ انگلیسی در عنوان که ابهامزدایی نیستند
[ویرایش]عنوانهای مقالههای ویکیپدیای فارسی که دارای نویسهٔ انگلیسی هستند ولی ابهامزدایی نیستند:
SELECT page_title
FROM page
WHERE page_namespace = 0
AND page_is_redirect = 0
AND page_title REGEXP '[A-Za-z]'
AND page_id NOT IN (
SELECT pp_page
FROM page_props
WHERE pp_propname = 'disambiguation'
);
مقالات بدون رده
[ویرایش]SELECT page_title
FROM page
LEFT JOIN categorylinks ON cl_from = page_id
WHERE page_namespace = 0
AND page_is_redirect = 0
AND ISNULL(cl_from);
روستاهای بدون میانویکی به ویکی انگلیسی
[ویرایش]SELECT /*SLOW OK*/ page_title
FROM page
WHERE page_id IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "جعبه_اطلاعات_روستای_ایران"
AND tl_namespace = 10
AND tl_from NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang = "en"
)
);
مقالههای دارای پیوند به ویکیپدیای انگلیسی بدون میانویکی en
[ویرایش]USE fawiki_p;
SELECT DISTINCT page_title
FROM page join externallinks
WHERE page_namespace = 0 and el_from=page_id AND el_index LIKE'%en.wikipedia.org%' AND page_id NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang = "en"
);
برای مقالات روستاهای ویکی انگلیسی که میانویکی فارسی ندارند
[ویرایش]SELECT /*SLOW OK*/ page_title
FROM page
WHERE page_id IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "IranCensus2006"
AND tl_namespace = 10
AND tl_from NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang = "fa"
)
);
مقالات ساختهشده با ابزار بهویکیفا
[ویرایش]تعداد مقالاتی که به وسیلهٔ ابزار وپ:به ویکیفا ساخته شدهاست!
SELECT count(*)
FROM revision join comment ON rev_comment_id=comment_id
WHERE comment_text LIKE '%به ویکیفا%';
تعداد مقالات اصلاح شده با ابزار اشتباهیاب
[ویرایش]USE fawiki_p;
SELECT count(*)
FROM revision join comment ON rev_comment_id=comment_id
WHERE comment_text LIKE '%⟸%';
مقالاتی که کمتر از ۳ رده دارند
[ویرایش]USE fawiki_p;
select page_title from page where page_namespace = 0 and page_is_redirect = 0
and page_id in (select cl_from from categorylinks group by cl_from having count(*) < 3) limit 10;
مقالاتی که بیشترین «پیوند به» دارند
[ویرایش]USE fawiki_p;
SELECT DISTINCT pl_title,COUNT(pl_from)
from pagelinks
WHERE pl_namespace = 0 and pl_from_namespace=0
GROUP BY pl_title
ORDER BY COUNT(pl_from) DESC limit 10;
مقالاتی که جعبه ندارند و به ویکیپدیای انگلیسی پیوند دارند
[ویرایش]USE fawiki_p;
SELECT /*SLOW OK*/ page_title
FROM page
WHERE page_namespace = 0 and page_is_redirect = 0 and page_id not IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "Infobox" AND tl_namespace = 10)
AND page_id IN (
SELECT ll_from
FROM langlinks
WHERE ll_from
and ll_lang = "en"
)
AND page_id NOT IN (
SELECT cl_from
FROM categorylinks
WHERE cl_to = "همه_صفحههای_ابهامزدایی"
)
AND page_id NOT IN (
SELECT cl_from
FROM categorylinks
WHERE cl_to = "مقالات_دارای_جعبه_اطلاعات"
);
صفحههای ابهامزدایی که بیشترین «پیوند به» را دارند
[ویرایش]USE fawiki_p;
SELECT DISTINCT pl_title,COUNT(pl_from)
FROM pagelinks JOIN page JOIN templatelinks
WHERE page_id=tl_from
AND (tl_title = "ابهامزدایی" OR tl_title = "ابهامزدایی_جغرافیا" OR tl_title = "ابهامزدایی_نام")
AND pl_title=page_title
AND pl_namespace = 0
AND pl_from_namespace=0
GROUP BY pl_title
ORDER BY COUNT(pl_from) DESC;
صفحات ابهامزدایی که در اثر انتقال بیشترین «پیوند به» دارند
[ویرایش]USE fawiki_p;
SELECT DISTINCT page_title
FROM revision join page join comment ON rev_page=page_id and rev_comment_id=comment_id
WHERE page_namespace=0
and page_id IN (SELECT tl_from FROM templatelinks WHERE tl_title = "ابهامزدایی")
and comment_text LIKE '%منتقل کرد%'
and page_title in (SELECT DISTINCT pl_title from pagelinks WHERE pl_namespace = 0 and pl_from_namespace=0 GROUP BY pl_title ORDER BY COUNT(pl_from) DESC limit 1000) limit 100;
صفحههای ابهامزدایی فارسی و انگلیسی که میانویکیشان به صفحهٔ ابهامزدایی نیست
[ویرایش]- فارسی ابهامزدایی، انگلیسی غیرابهامزدایی
select fap.page_title, fall.ll_title
from fawiki_p.page as fap
right join fawiki_p.page_props as fapp on fap.page_id = fapp.pp_page
right join fawiki_p.langlinks as fall on fap.page_id = fall.ll_from
where fap.page_namespace = 0
and fap.page_is_redirect = 0
and fapp.pp_propname = 'disambiguation'
and fall.ll_lang = "en"
and replace(fall.ll_title, ' ', '_') not in ( # enwiki disambig titles
select enp.page_title
from enwiki_p.page as enp right join enwiki_p.page_props as enpp on enp.page_id = enpp.pp_page
where enp.page_namespace = 0
and enp.page_is_redirect = 0
and enpp.pp_propname = 'disambiguation'
);
- انگلیسی ابهامزدایی، فارسی غیرابهامزدایی
select enp.page_title, enll.ll_title
from enwiki_p.page as enp
right join enwiki_p.page_props as enpp on enp.page_id = enpp.pp_page
right join enwiki_p.langlinks as enll on enp.page_id = enll.ll_from
where enp.page_namespace = 0
and enp.page_is_redirect = 0
and enpp.pp_propname = 'disambiguation'
and enll.ll_lang = "fa"
and replace(enll.ll_title, ' ', '_') not in ( # enwiki disambig titles
select fap.page_title
from fawiki_p.page as fap right join fawiki_p.page_props as fapp on fap.page_id = fapp.pp_page
where fap.page_namespace = 0
and fap.page_is_redirect = 0
and fapp.pp_propname = 'disambiguation'
);
مقالات بدون میانویکی که دارای الگوهای سرشناسی و بدون منبع هستند
[ویرایش]USE fawiki_p;
SELECT /*SLOW OK*/ concat('*[[',page_title,']]')
FROM page
WHERE page_id IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "بدون_منبع"
AND tl_namespace = 10)
and page_id IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "سرشناسی"
AND tl_namespace = 10)
AND page_id NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang = "en"
);
تغییرمسیرهای دارای میانویکی
[ویرایش]تغییرمسیرهایی که میانویکی دارند و پیوند هدف میانویکی ندارد.
USE fawiki_p;
SELECT
CONCAT ('# [[', S.page_title, ']] > [[:', ll_lang, ':', ll_title, ']]'),
T.page_title
FROM
page S
INNER JOIN
langlinks
ON S.page_id = ll_from
JOIN
redirect
ON rd_from = S.page_id
JOIN
page T
ON T.page_title = rd_title
WHERE
S.page_namespace = 0
AND S.page_is_redirect = 1
AND T.page_namespace = 0
AND T.page_is_redirect = 0 #
AND ll_lang = 'en'
AND NOT EXISTS
(
SELECT
null
FROM
langlinks
WHERE
ll_from = T.page_id
)
GROUP BY
S.page_title
ORDER BY
COUNT(ll_from) DESC;
بحثهای یتیم
[ویرایش]select p1.page_namespace, p1.page_title from page as p1 where mod(p1.page_namespace, 2) = 1 and p1.page_namespace <> 3 and p1.page_title not like "%/%" and p1.page_title not in (select p2.page_title from page as p2 where p2.page_title = p1.page_title and p2.page_namespace = p1.page_namespace - 1);
ویرایشهای کاربران
[ویرایش]ویرایشها کاربر بر پایه تاریخ
[ویرایش]SELECT /*SLOW OK */
DATE (
CONCAT (
YEAR(rev_timestamp),
"-",
MONTH(rev_timestamp),
"-",
DAY(rev_timestamp)
)
) AS DAY,
COUNT(rev_timestamp) AS revisions
FROM revision
WHERE rev_user_text = 'Reza1615'
GROUP BY DAY;
مقالههای ساخته شدهٔ کاربر برپایه حجم و میانویکی
[ویرایش]USE fawiki_p;
SELECT page_title,page_len, count(ll_lang)
FROM revision
INNER JOIN page ON rev_page = page_id join langlinks on page_id = ll_from where
WHERE not page_id in
(select cl_from from categorylinks where
cl_to = 'همه_صفحههای_ابهامزدایی') and page_namespace = 0
AND rev_user_text = 'Reza1615'
AND rev_parent_id = 0
AND page_is_redirect = 0
GROUP BY page_title ORDER BY page_len;
مقالههای ساختهٔ کاربر بر پایهٔ تاریخ
[ویرایش]مقالههای ساخته شده بر پایه تاریخ یک کاربر خاص
SELECT /*SLOW OK */ page_title,
DATE (
CONCAT (
YEAR(rev_timestamp),
"-",
MONTH(rev_timestamp),
"-",
DAY(rev_timestamp)
)
) AS DAY
FROM revision
INNER JOIN page ON rev_page = page_id
WHERE page_namespace = 0
AND rev_user_text = 'Reza1615'
AND rev_parent_id = 0
AND page.page_is_redirect = 0
GROUP BY DAY;
ORDER BY rev_timestamp;
ویرایش کاربر برپایهٔ خلاصه ویرایش و تاریخ
[ویرایش]این کوئری ویرایشهایی که خلاصه Bot:foooooooo
دارند و از تاریخ ۱۲ سپتامبر ۲۰۱۴ به بعد هستند را مد نظر میگیرد
USE fawiki_p;
SELECT DISTINCT page_title
FROM revision join page join comment ON rev_page=page_id and rev_comment_id=comment_id
WHERE page_namespace=0
and comment_text LIKE 'Bot:foooooooo' and rev_timestamp > 20140912000000;
ردهها
[ویرایش]ردههای همنام با مقالهها
[ویرایش]استخراج ردههای همنام با مقاله
SELECT DISTINCT /*SLOW OK */ page_title
FROM categorylinks
INNER JOIN page
WHERE cl_to = page_title
AND page_is_redirect = 0;
ردههای همسنگ مورد نیاز
[ویرایش]کوئری استخراج ردههایی همسنگ مورد نیاز با دستور sql enwiki_p < radeh.sql >cat.txt
SELECT /* SLOW_OK */ cl_to
FROM categorylinks
WHERE cl_from IN (
SELECT DISTINCT ll_from
FROM langlinks
WHERE ll_lang = "fa"
)
AND cl_to NOT IN (
SELECT DISTINCT page_title
FROM langlinks
LEFT JOIN page ON page_id = ll_from
WHERE ll_lang = "fa"
AND page_namespace = 14
)
GROUP BY cl_to;
برای فشردهسازی و امکان دانلود برای دیگران دستور زیر را وارد نمائید که نتیجهاش می شود فایل encat.zip و برای کاربرها قابل دانلود خواهد بود.
zip -r /home/YourUser/public_html/encat /home/YourUser/encat.txt
ردههای فاقد میانویکی
[ویرایش]استخراج ردههایی که میانویکی ندارند و {{رده بهتر}} هم ندارند
USE fawiki_p;
SELECT /*SLOW OK*/ concat('*[[:Category:',page_title,']]')
from page join
category on cat_title=page_title and page_namespace=14 and page_is_redirect = 0
LEFT JOIN templatelinks
ON tl_from = page_id AND tl_namespace = 10 and (cat_pages>0 or cat_subcats>0 or cat_files>0) AND tl_title not IN ( 'رده_خالی','رده_بهتر', 'رده_ابهامزدایی', 'رده_ردیابیکردن' ) where
page_id NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang in ("en","fr","it","ar","ckb","ru","nl")
) group by page_id;
استخراج ردههای خالی
[ویرایش]USE fawiki_p;
SELECT page_title,
Count(ll_lang)
FROM page
JOIN category
ON page_title = cat_title
LEFT JOIN categorylinks
ON page_title = cl_to
LEFT JOIN templatelinks
ON tl_from = page_id
AND tl_title IN ( 'رده_خالی', 'رده_بهتر',
'رده_ابهامزدایی',
'رده_ردیابیکردن' )
LEFT JOIN langlinks
ON page_id = ll_from
WHERE page_namespace = 14
AND page_is_redirect = 0
AND cl_to IS NULL
AND tl_title IS NULL
GROUP BY page_title
ORDER BY 2,
1;
صفحات موجود در یک رده
[ویرایش]SELECT page_title
FROM page
INNER JOIN categorylinks
WHERE cl_from = page_id
AND cl_to = 'مقالههای_انتخابی_نسخه_ویکیپروژه_نسخه_آفلاین'
GROUP BY page_title;
ردههایی که {{رده بهتر}} هستند نباید میانویکی داشته باشند.
SELECT DISTINCT CONCAT ('*[[:رده:',page_title,']]') FROM page WHERE page_id IN (SELECT tl_from FROM templatelinks WHERE tl_title = 'رده_بهتر' AND tl_namespace = 10) AND page_id IN (SELECT DISTINCT page_id
FROM langlinks LEFT JOIN page
ON page_id = ll_from
WHERE ll_from IS NOT NULL AND page_namespace = 14) AND page_namespace = 14;
ردههایی که حجمشان زیاد است و ممکن است کاربر تازهکار در آنها مقاله قرار داده باشد
[ویرایش]SELECT concat('#[[:رده:',page_title,']] > ',page_len)
FROM page
WHERE page_namespace = 14 and page_len>800 ORDER BY page_len DESC;
پروندهها
[ویرایش]مقالههای نیازمند پرونده همسنگ
[ویرایش]مقالههایی که پرونده ندارند ولی نسخهٔ انگلیسی آنها پرونده دارد.
FORMAT SQL
Formatted SQL:
SELECT
CONCAT ('[[',
fap.page_title,
']]'),
CONCAT ('[[:en:',
enp.page_title,
']]') ,
CONCAT ('[[File:',
limagelist.il_to,
'|72px]]> File:',
limagelist.il_to)
FROM
fawiki_p.page as fap
INNER JOIN
fawiki_p.langlinks as fal
ON fap.page_id = fal.ll_from
inner join
enwiki_p.page as enp
on fal.ll_title=enp.page_title
join
(
SELECT
*
FROM
enwiki_p.imagelinks as eni
) as limagelist
WHERE
fap.page_namespace = 0
and fal.ll_lang = 'en'
AND fap.page_is_redirect = 0
and fap.page_id not in (
SELECT
fai.il_from
FROM
fawiki_p.imagelinks as fai
)
and enp.page_id=limagelist.il_from
and not limagelist.il_to like 'Flag_of_%'
and not limagelist.il_to like 'Ambox_%'
and not limagelist.il_to like 'Wiktionary%'
and not limagelist.il_to like 'Wikibooks%'
and not limagelist.il_to like 'Wikivoyage%'
and not limagelist.il_to like 'Incubator%'
and not limagelist.il_to like 'Searchtool%'
and not limagelist.il_to like 'Speech_balloon%'
and not limagelist.il_to like 'Crystal_Clear%'
and not limagelist.il_to like 'Speakerlink%'
and not limagelist.il_to like 'Loudspeaker%'
and not limagelist.il_to like 'Padlock%'
and not limagelist.il_to like 'Nuvola_apps_%'
and not limagelist.il_to like 'Wikiquote%'
and not limagelist.il_to like 'Wikisource%'
and not limagelist.il_to like 'Wikinews%'
and not limagelist.il_to like 'Wikiversity%'
and not limagelist.il_to like 'Question_book%'
and not limagelist.il_to like 'Folder_Hexagonal%'
and not limagelist.il_to like 'Portal-puzzle%'
and not limagelist.il_to like 'Edit-clear%'
and not limagelist.il_to like 'Text_document_with_red_question_mark%'
and not limagelist.il_to like '%_stub%'
and not limagelist.il_to like 'Rod_of_Asclepius%'
and not limagelist.il_to like 'Merge-arrows%'
and not limagelist.il_to like '%_icon%'
and not limagelist.il_to like '%Balloon%'
and not limagelist.il_to like 'Mergefrom%'
and not limagelist.il_to like 'WikiProject%'
and not limagelist.il_to like 'Yes_check%'
and not limagelist.il_to like 'X_mark%'
and not limagelist.il_to like 'Blank%'
and not limagelist.il_to like '%_Icon%'
and not limagelist.il_to like 'Symbol_book_class%'
and not limagelist.il_to like 'Free_and_open-source_software_logo%'
and not limagelist.il_to like 'Red_pog%'
and not limagelist.il_to like 'Symbol_list_class%'
and not limagelist.il_to like 'Allah-green%'
and not limagelist.il_to like 'Symbol_support_vote%'
and not limagelist.il_to like 'A_coloured_voting_box%'
and not limagelist.il_to like 'Wiki_letter_w_cropped%'
and not limagelist.il_to like 'Commons%' limit 5000;
پروندهاییی که یک کاربر بارگذاری کرده و متادیتا ندارند
[ویرایش]در کوئری زیر foo را با نام کاربر بدون پیشوند کاربر: جایگزین کنید.
USE fawiki_p;
SELECT img_name,img_metadata
FROM image WHERE img_metadata not like '0' and img_user_text='foo';
پروندههای همعنوان در ویکیفا و انبار
[ویرایش]استخراج نام پروندههایی که در انبار و ویکیفا مشترک هستند و باید در ویکیفا حذف شوند.
SELECT /*SLOW OK */ CONCAT (
'* [[:commons:Image:',
db1.img_name,
']] = [[:fa:Image:',
db2.img_name,
']] (hash: ',
db1.img_sha1,
')'
) AS collision
FROM commonswiki_p.image db1
INNER JOIN fawiki_p.image db2 ON db1.img_sha1 = db2.img_sha1
WHERE db1.img_sha1 <> '';
پروندههای ناآزاد در فضای نام غیرمقاله
[ویرایش]پروندههای غیرآزادی (الگو:محیط_نرمافزار) که در فضای غیر مقاله به کار رفتهاند.
SELECT image_title,
page_title AS article_title
FROM page,
(
SELECT il_to AS image_title,
MAX(il_from) AS article_id
FROM page,
imagelinks
WHERE page_title = il_to
AND page_id IN (
SELECT page_id
FROM page,
templatelinks
WHERE page_namespace = 6
AND page_is_redirect = 0
AND page_id = tl_from
AND tl_title = 'محیط_نرمافزار'
AND tl_namespace = 10
)
GROUP BY il_to
) AS imageuse
WHERE page_id = article_id
AND page_namespace > 0;
فهرست کردن پروندهها همراه با الگوهایشان
[ویرایش]SELECT page_title,
tl_title
FROM page
INNER JOIN templatelinks
WHERE page_id = tl_from
AND (
tl_title = 'سخ'
OR tl_title = 'سرخط'
OR tl_title = 'Imbox'
OR tl_title = 'File_other'
)
AND page_is_redirect = 0
AND tl_namespace = 10
AND page_namespace = 6
ORDER BY page_title;
پروندههای موجود در ویکیانبار که در ویکیفا استفاده شدهاند
[ویرایش]USE commonswiki_p;
SELECT gil_to
FROM globalimagelinks
WHERE gil_wiki = 'fawiki' limit 100;
پروندههایی کامنز که ردهبندی ندارند و در ویکیفا استفاده شدهاند
[ویرایش]USE commonswiki_p;
SELECT CONCAT (
"# [[:File:",
gil_to,
"]] > [[:fa:",
gil_page_title,
"]]"
)
FROM globalimagelinks
WHERE gil_wiki = 'fawiki'
AND gil_to IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = 'Uncategorized'
) limit 100;
پیوندهای قرمز موجود در مقالات فیلمهای ایرانی
[ویرایش]کد ۱۳: پیوندهای قرمز در مقالاتی که عنوان فیلمهای ایرانی در ردههایشان موجود است.
SELECT pl_title,
page_title,
count(pl_title)
FROM pagelinks
INNER JOIN page ON pl_from = page_id
INNER JOIN categorylinks ON page_id = cl_from
WHERE pl_title NOT IN (
SELECT page_title
FROM page
WHERE page_namespace = 0
)
AND pl_namespace = 0
AND cl_to LIKE "%فیلمهای_ایرانی_%"
AND page_namespace = 0
GROUP BY pl_title
ORDER BY COUNT(pl_title) DESC;
پیوندبه بیرون
[ویرایش]مقالههایی که بیشترین پیوند به بیرون دارند
[ویرایش]مقالههایی که بیشترین پیوند به بیرون دارند
USE fawiki_p;
SELECT COUNT(el_from) AS total, el_from, page_title
FROM externallinks, page
WHERE externallinks.el_from = page_id AND page_is_redirect = 0 AND page_namespace = 0
GROUP BY el_from
ORDER BY total DESC;
پیوند به بیرونهایی که بیشترین کاربرد را دارند
[ویرایش]پیوند به بیرونهایی که بیشترین کاربرد را دارند
USE fawiki_p;
SELECT COUNT(el_to) AS total, SUBSTRING_INDEX(el_to, '/', 3) AS search
FROM externallinks, page
WHERE page_id = el_from AND page_namespace = 0
GROUP BY search
ORDER BY total DESC limit 500;
پرکاربردترین وبگاهها در ویکیفا
[ویرایش]پرکاربردترین وبگاهها در ویکیفا
USE fawiki_p;
SELECT COUNT( replace(replace(replace(replace(el_to, 'https:', ''), 'http:', ''),'//www.',''),'//','') ) AS total, replace(replace(replace(replace(SUBSTRING_INDEX(el_to, '/', 3), 'https:', ''), 'http:', ''),'//www.',''),'//','') AS search
FROM externallinks, page
WHERE page_id = el_from AND page_namespace = 0
GROUP BY search
ORDER BY total DESC limit 1000;
الگوها
[ویرایش]الگوهایی که عنوانشان غیرفارسی (انگلیسی) است و میانویکی ندارند
[ویرایش]الگوهای خرد که از الگوی خرد استفاده نکردهاند
[ویرایش]- این کوئری هر از چندی باید گرفته شد چون این الگوها ربات تمیزکاری را به خطا میاندازند.
USE fawiki_p;
SELECT /*SLOW OK*/ page_title
FROM page
WHERE
page_namespace = 10 and page_is_redirect = 0 and
page_id IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "Asbox"
AND tl_namespace = 10
)
and page_id not IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "الگوی_خرد"
AND tl_namespace = 10
);
توضیحات الگویی که میانویکی دارند
[ویرایش]SELECT page_title
FROM page
INNER JOIN langlinks ON page_id = ll_from
WHERE page_namespace = 10
AND page_is_redirect = 0
AND (
page_title LIKE "%/doc%"
OR page_title LIKE "%/Doc%"
OR page_title LIKE "%/توضیحات%"
)
GROUP BY page_title
ORDER BY COUNT(ll_from) DESC;
الگوهایی که بیشترین پیوند تغییرمسیر دارند
[ویرایش]USE fawiki_p;
SELECT page_title,
Count(pl_from)
FROM page
LEFT JOIN pagelinks
ON page_id = pl_from
WHERE pl_namespace = 0
AND pl_from_namespace = 10
AND page_namespace = 10
AND page_is_redirect = 0
AND pl_title IN (SELECT page_title
FROM page
WHERE page_namespace = 0
AND page_is_redirect = 1)
GROUP BY page_title
ORDER BY Count(pl_from) DESC LIMIT 1000;
کوئری از سیاهه حذف مقالات
[ویرایش]SELECT /*SLOW OK */ log_title,
log_comment,
log_action
FROM logging
WHERE log_type = 'delete'
AND log_action = 'delete'
AND log_namespace = 0
GROUP BY log_timestamp
ORDER BY log_title;
صفحههای دیگر
[ویرایش]صفحات ابهامزدایی مورد نیاز ویکیفا بر پایه تعداد میانویکی
[ویرایش]SELECT /*SLOW OK*/ page_title
FROM page
WHERE page_id IN (
SELECT tl_from
FROM templatelinks
WHERE tl_title = "Disambiguation"
AND tl_namespace = 10
AND tl_from IN (
SELECT ll_from
FROM langlinks
WHERE ll_from
GROUP BY ll_from
HAVING COUNT(*) > 15
)
AND tl_from NOT IN (
SELECT ll_from
FROM langlinks
WHERE ll_lang = "fa"
)
);
زیرصفحات کاربریای که رده دارند
[ویرایش]SELECT DISTINCT CONCAT (
'#[[user:',
page_title,
']]'
)
FROM categorylinks
INNER JOIN page
WHERE cl_from = page_id
AND page_title LIKE "%/%"
AND page_namespace = 2
AND cl_to NOT IN (
SELECT page_title
FROM categorylinks
INNER JOIN page
WHERE cl_from = page_id
AND cl_to = "ردههای_پنهان"
AND page_namespace = 14
);
ویکیداده
[ویرایش]آیتمهای متصل به ویکیفا که claim ندارند
[ویرایش]USE wikidatawiki_p;
SELECT CONCAT('* [[', ips_site_page, ']]') FROM wb_items_per_site
JOIN wb_entity_per_page ON ips_item_id=epp_entity_id AND epp_entity_type='item' AND epp_redirect_target IS NULL
LEFT JOIN pagelinks ON epp_page_id=pl_from AND pl_from_namespace=0 AND pl_namespace=0
WHERE ips_site_id='fawiki'
AND pl_from IS NULL
ORDER BY ips_site_page ASC;
آیتمهای متصل به تغییرمسیر در ویکیفا
[ویرایش]USE fawiki_p;
SELECT page_namespace, page_title, pp_value AS item
FROM (SELECT * FROM page_props WHERE pp_propname = 'wikibase_item') AS props
JOIN (SELECT * FROM page WHERE page_is_redirect = 1) AS page
ON page_id = pp_page
ORDER BY page_title;
آیتمهای متصل به ویکیفا که تعداد پیوندهای داخلی آنها کمتر از ۴ است (claim کمی دارند)
[ویرایش]USE wikidatawiki_p;
SELECT CONCAT('* [[', ips_site_page, ']]\t[[Q',ips_item_id,']] #') FROM wb_items_per_site
JOIN wb_entity_per_page ON ips_item_id=epp_entity_id AND epp_entity_type='item' AND epp_redirect_target IS NULL
LEFT JOIN pagelinks ON epp_page_id=pl_from AND pl_from_namespace=0 AND pl_namespace=0
WHERE ips_site_id='fawiki' group by pl_from having count(*) < 4;
مقالات خوب و برگزیده ویکیفا در ویکیداده
[ویرایش]query.wikidata
[ویرایش]مناطق مسکونی در کشور هند که در ویکیفا نیست
[ویرایش]متفرقه
[ویرایش]سال تولد افراد اهل بعضی از شهرهای ایران
[ویرایش]SELECT page_title,
cl_to
FROM categorylinks
INNER JOIN page
WHERE page_title IN (
SELECT DISTINCT page_title
FROM categorylinks
INNER JOIN page
WHERE cl_from = page_id
AND (
cl_to LIKE "%اهل_ایران%"
OR cl_to LIKE "%اهل_تهران%"
OR cl_to LIKE "%اهل_شیراز%"
OR cl_to LIKE "%اهل_اصفهان%"
OR cl_to LIKE "%اهل_سمنان%"
OR cl_to LIKE "%اهل_قم%"
OR cl_to LIKE "%اهل_کرج%"
OR cl_to LIKE "%اهل_یزد%"
OR cl_to LIKE "%اهل_دامغان%"
OR cl_to LIKE "%اهل_کرمان%"
OR cl_to LIKE "%اهل_بوشهر%"
OR cl_to LIKE "%اهل_اهواز%"
OR cl_to LIKE "%اهل_بم%"
OR cl_to LIKE "%اهل_همدان%"
OR cl_to LIKE "%اهل_نیشابور%"
OR cl_to LIKE "%اهل_مشهد%"
OR cl_to LIKE "%اهل_تبریز%"
OR cl_to LIKE "%اهل_ارومیه%"
OR cl_to LIKE "%اهل_خرمشهر%"
OR cl_to LIKE "%اهل_زاهدان%"
OR cl_to LIKE "%اهل_ساری%"
OR cl_to LIKE "%اهل_قزوین%"
OR cl_to LIKE "%اهل_رشت%"
OR cl_to LIKE "%اهل_لار%"
OR cl_to LIKE "%اهل_زابل%"
OR cl_to LIKE "%اهل_بابل%"
)
AND page_namespace = 0
)
AND cl_from = page_id
AND (
cl_to LIKE "%زادگان%"
AND cl_to LIKE "%میلادی%"
)
AND page_namespace = 0 LIMIT 10;
اتصال با زبان پایتون
[ویرایش]بعد از اینکه بر اساس شروع کار با تولسرور وارد حساب تولسرور خود شدید فایل .my.cnf را در شاخه اصلی باز کنید پسورد و کاربری شما برای ارتباط با دیتابیس تول سرور در آنجا قرار دارد سپس در انتهای فایل user-config.py خود عبارت زیر را وارد کنید تا به کمک کاربری شما ربات بتواند از اطلاعات تول سرور استفاده کند. برای استفاده از اطلاعات تول سرور باید اطلاعاتی در زمینه کدنویسی sql داشته باشید یا از رباتهایی که Mysql را اجرا میکنند استفاده کنید.
console_encoding = 'utf-8'
db_username = "نام کاربریتان در تول سرور"
db_password = "پسوردتان"
کدهای پایتون و Mysql
[ویرایش]برای کنترل و انجام عملیات بر روی پایتون کوئریهای Mysql گرفته شده از تولسرور و همچنین تحلیل کردن دادههای خام میتوانید نتیجههای بدست آمده را در وبگاه یا ویکیپدیا مطالعه کنید.
کد اتصال به کوئری Mysql
[ویرایش]کد زیر به صورت خط به خط اطلاعات کوئری را در اختیار شما قرار میدهد.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import catlib ,pagegenerators
import wikipedia,urllib,gzip,codecs,re
import MySQLdb as mysqldb
import config
site = wikipedia.getSite("fa")#--کد ویکیای که میخواهید اطلاعات را از آن بدست بیاورید.
query = open("tusn.sql").read()#---نام فایل اسکیوال که میخواهید به کمک آن کوئری بگیرید.
#query = "SELECT page_title,page_id FROM page LIMIT 10" # -نمونه کوئری ساده برای تست
wikipedia.output(u'Executing query:\n%s' % query)
#سه خط پایین را تغییر ندهید و به همین صورت بماند. فقط در صورتی که کوئری از ویکی دیگری میگیرید.
# مثلا برای ویکی انگلیسی fawiki-p ==> enwiki-p میشود.
conn = mysqldb.connect("fawiki.labsdb", db = site.dbName(),
user = config.db_username,
passwd = config.db_password)
cursor = conn.cursor()
query = query.encode(site.encoding())
cursor.execute(query)
results = cursor.fetchall()
for row in results:#به کمک این حلقه میتوانید پاسخ کوئری را خط به خط بخوانید
#محل کد شما که پاسخ کوئری را به صورت خط به خط دریافت میکند
نمونه کد پایتون
[ویرایش]در این مثال فهرستی از ده مقاله در ویکیپدیا و کدهایشان ارایه میگردد که این فهرست تبدیل به جدول شده و در صفحه ویکیپدیا:صفحه تمرین بارگذاری میگردد.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import catlib ,pagegenerators
import wikipedia,urllib,gzip,codecs,re
import MySQLdb as mysqldb
import config
pagetop=u"'''بهروز شده توسط ربات در تاریخ''''': ~~~~~''\n\n"
pagetop+=u'\n{| class="wikitable sortable"\n'
pagetop+=u'!ردیف!!صفحه!!کد صفحه\n|-'
pagedown=u'\n|}\n[[رده:ویژگیهای ویکیپدیا]]
[[رده:تست]]'
adress=u"ویکیپدیا:صفحه تمرین"
message=u"ربات:تست"
count=0
line_items=' '
#---------------------------------------------- sql part--------------
site = wikipedia.getSite("fa")
#query = open("file name").read()#--you can add you sql name
query = "SELECT page_title,page_id FROM page LIMIT 10" # ده مقاله و کد شان را ارائه میدهد
wikipedia.output(u'Executing query:\n%s' % query)
conn = mysqldb.connect("fawiki.labsdb", db = site.dbName(),
user = config.db_username,
passwd = config.db_password)
cursor = conn.cursor()
query = query.encode(site.encoding())
cursor.execute(query)
results = cursor.fetchall()
#---------------------------------------------- end of sql part---------
for row in results:
count+=1
for i in range(0,len(row)):
item=unicode(str(row[i]).strip(),'UTF-8')
line_items+=u'{{جا:formatnum:'+item+u'}}||'
line=line_items.strip()
text+= u'\n|{{جا:formatnum:' +str(count)+u'}}||'+ line+u'\n|-'
text=pagetop+text+pagedown
page = wikipedia.Page(site,adress)
page.put(text,message)
کدهایی که در از کوئری به وسیلهٔ اسکیوال استفاده کردهاند
[ویرایش]سوالهای رایج
[ویرایش]پرسش:چگونه به توللبز وصل شوم و اطلاعات را انتقال دهم یا بگیرم؟
- پاسخ: برای ویندوز نرمافزار WinSCP استفاده کنید.برای اطلاعات بیشتر درباره WinSCP اینجا را مطالعه نمایید. برای اتصال به توللبز با سیستم عاملهای غیر از ویندوز اینجا را مطالعه نمایید.
جستارهای وابسته
[ویرایش]پیوند به بیرون
[ویرایش]منابع
[ویرایش]- وبگاه تولسرور
- مدیاویکی