راهنما:استخراج آمار از پایگاه داده مدیاویکی

دریافت اطلاعات از ویکی‌پدیا به دو روش مقدور است.

  1. دریافت اطلاعات از دیتابیس که توسط اشتراک تول‌سرور یا دانلود دیتابیس ویکی‌پدیا مقدور است.
  2. دریافت اطلاعات از نرم‌افزار مدیاویکی توسط 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
        WHERE tl_title = "Infobox_film"
            AND tl_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 اینجا را مطالعه نمایید. برای اتصال به تول‌لبز با سیستم عامل‌های غیر از ویندوز اینجا را مطالعه نمایید.

جستارهای وابستهویرایش

پیوند به بیرونویرایش

منابعویرایش

  • وب‌گاه تول‌سرور
  • مدیاویکی