API: คำถามที่พบบ่อย

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:FAQ and the translation is 58% complete.

Outdated translations are marked like this.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Ido • ‎Limburgs • ‎Nederlands • ‎Tiếng Việt • ‎Türkçe • ‎bosanski • ‎català • ‎dansk • ‎español • ‎français • ‎hrvatski • ‎italiano • ‎kurdî • ‎occitan • ‎polski • ‎português • ‎português do Brasil • ‎sicilianu • ‎suomi • ‎svenska • ‎čeština • ‎беларуская • ‎беларуская (тарашкевіца)‎ • ‎български • ‎русский • ‎українська • ‎العربية • ‎فارسی • ‎हिन्दी • ‎অসমীয়া • ‎মেইতেই লোন্ • ‎ಕನ್ನಡ • ‎ไทย • ‎中文 • ‎日本語 • ‎粵語 • ‎한국어
หน้านี้กำลังทำงานอยู่

ยังสามารถอ่าน API : หน้าหลัก . คำตอบบางคำถามไม่ได้รับคำตอบที่นี่และชี้ไปยังหน้าอื่นที่เป็นประโยชน์

วิธีที่คุณสามารถช่วยเหลือได้ ...

ให้ความช่วยเหลือ?

  1. อ่านที่ FAQ
  2. ลองหาคำตอบจากคำถามของคุณที่ API documentation here หรือที่หน้า self-documenting API home page
  3. ถ้าคุณไม่สามารถหาคำตอบได้บนหน้าเว็บ

ไฟล์ส่วนบกพร่องหรือร้องขอคุณสมบัติพิเศษ?

ถ้าคุณพบข้อบกพร่องของ API หรือมีคำขอคุณลักษณะให้รายงานใน Phabricator ค้นหาข้อบกพร่องที่มีอยู่ก่อน ก่อน (โปรดอย่าทำซ้ำข้อบกพร่องที่ซ้ำกัน) และใส่ MediaWiki-API เป็นโครงการเมื่อรายงานข้อผิดพลาดใหม่กับ API หากฟังก์ชันที่คุณต้องการหรือรายงานข้อผิดพลาดเกิดจากส่วนขยาย (เช่น AbuseFilter, FlaggedRevs) ให้เพิ่มโครงการของส่วนขยายเช่น "มีเดียวิกิ-ส่วนขยาย-ตัวกรองการละเมิด"

หาว่าการกระทำหรือ submodule เพื่อโทร

MediaWiki API มีขนาดใหญ่และส่วนขยายจะขยายใหญ่ขึ้น ข้อแนะนำบางประการ

  • หากคุณกำลังพยายามหาข้อมูลเกี่ยวกับเพจคุณอาจจะใช้ prop= submodule ของ action=query submodules แบบสอบถามอื่น ๆ จะส่งกลับ รายการ ของหน้าเว็บและ meta - ข้อมูลเกี่ยวกับ wiki = 1 ดูความช่วยเหลือ API ที่สร้างขึ้นสำหรับ โมดูลย่อยของแบบสอบถามทั้งหมด
  • หากคุณเห็นหน้า Wiki ทำอะไรที่น่าสนใจหลังการโหลดหน้าแรกจะต้องสร้างคำขอ API
    • เปิดคอนโซลนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์และค้นหาคำขอเครือข่ายที่ api.php
    • รหัสทั้งหมดที่เรียกใช้วิกิมีเดียวิกิเป็นโอเพนซอร์สดังนั้นคุณสามารถอ่านรหัสต้นทางที่สร้างคำขอ API ได้ ยุทธศาสตร์หนึ่งในการค้นหาซอร์สโค้ดคือการต่อท้าย ?uselang=qqx URL ของวิกิเพื่อดูคีย์ข้อความใกล้ ๆ กับที่แสดงผล API จากนั้นคุณสามารถค้นหาคีย์ข้อความนี้ในไฟล์ข้อความที่ถูกแปล i18n/en.json ของส่วนขยายและส่วนขยาย
  • คุณสามารถดูความช่วยเหลือเกี่ยวกับ API แบบขยายได้ทั้งหมดในหน้าเดียวโดยการเพิ่ม recursivesubmodules=1, ที่นี่

ลิงก์ไปยัง API ที่สร้างขึ้นข้างต้นไปที่ Wikipedia อังกฤษคุณควรเรียกดูความช่วยเหลือ API ที่สร้างขึ้นในวิกิพีเดียซึ่งคุณจะต้องสร้างคำขอ API เนื่องจาก wiki ต่างๆมีการกำหนดค่าที่แตกต่างกันและชุดของส่วนขยายต่าง ๆ กัน

วิธีเรียกใช้ API?

ส่งคำขอ HTTP ไปที่ api.php. ตัวอย่างเช่นในวิกิพีเดียภาษาอังกฤษ URL คือ https://en.wikipedia.org/w/api.php Wiki ส่วนใหญ่มี api.php ที่ URL ที่คล้ายกัน: เพียงแค่ใช้ api.php แทน index.php ในการดำเนินการของเพจ ตั้งแต่ 1.17 เป็นต้นไป MediaWiki สนับสนุน Really Simple Discovery; แหล่งที่มา HTML ของทุกหน้ามีลิงก์ RSD ที่ชี้ไปยัง descriptor RSD ซึ่งระบุว่าจะหา API ที่ไหน หากคุณไม่สามารถหา URL ของ api.php ในวิกิพีเดียของบุคคลที่สามที่ไม่ใช่วิกิพีเดียได้โปรดติดต่อเจ้าของ วิกิอาจไม่เปิดใช้ MediaWiki API โปรดดูที่ $wgEnableAPI

For example, on the English Wikipedia, the URL is https://en.wikipedia.org/w/api.php . Most wikis have api.php at a similar URL: just use api.php in place of index.php in page actions. From 1.17 onwards, MediaWiki supports Really Simple Discovery; the HTML source of every page has an RSD link pointing to an RSD descriptor which indicates where to find the API. If you can't figure out the URL of api.php on a third-party (non-Wikimedia-operated) wiki, contact its owner. The wiki may not enable the MediaWiki API, see $wgEnableAPI.

ทดลองใช้ API

  • ได้ที่ Special:ApiSandbox
  • เปิดหน้าต่างของ developer console และดูการร้องขอทั้งหมดที่ api.php เช่นเดียวกับการดำเนินการบนวิกิ

วิธีควบคุมรูปแบบ output?

Pass &format=someformat in the query string. See the list of output formats for more information.

วิธีเช็คว่าโมดูลของ API ใช้งานได้หรือไม่?

คุณสามารถใช้ action=paraminfo เพื่อขอข้อมูลเกี่ยวกับโมดูล API และ submodules (เช่น query+geosearch) ที่คุณต้องการเรียกใช้ อาร์กิวเมนต์ paraminfo.modules ในการตอบสนองจะต้องมีรหัส path สำหรับแต่ละโมดูลและ submodule ไม่มีอะไรที่ขาดหายไป

The paraminfo.modules array in the response must contain a path key for each module and submodule, anything missing is not available.

หากโมดูล API ไม่พร้อมใช้งานและคุณทราบว่าใช้ส่วนขยายใดคุณสามารถตรวจสอบได้ว่ามีการโหลดส่วนขยายดังกล่าวโดยการสอบถามข้อมูล meta siteinfo สำหรับ siprop=extensions และ มองหาชื่อในรายการที่ส่งคืน

แม้ว่าโมดูลจะปรากฏขึ้นคุณต้องจัดการกับข้อผิดพลาดของ API เสมอ

หากพบปัญหา?

โปรดดูที่ Errors and warnings.

An error response from the API will set the MediaWiki-API-Error HTTP header and return an error structure. For an example error response, visit https://en.wikipedia.org/w/api.php?action=blah.

รับเนื้อหาของหน้าเว็บ (wikitext)?

หากคุณต้องการแค่ wikitext แบบดิบโดยไม่มีข้อมูลใด ๆ คุณควรใช้ action = raw mode ของ index.php แทน API: https://en.wikipedia.org/w/index.php?action=raw&title=Main_Page โปรดทราบว่านี่จะส่งออก wikitext แบบธรรมดาโดยไม่มีการจัดรูปแบบใด ๆ ดูเพิ่มเติม action=raw เอกสาร

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับหน้าเว็บและเวอร์ชันล่าสุดโปรดใช้ API: https://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Main_Page ดูเอกสารประกอบสำหรับโมดูล prop=revisions

คุณสามารถดึงข้อมูลได้ 50 หน้าต่อคำขอ API: https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles=Main_Page%7CArticles generators

รับเนื้อหาของหน้าเว็บ (wikitext)?

หากคุณต้องการใช้ HTML ให้ดีที่สุดคือใช้ action=render ของ index.php แทน API: https://en.wikipedia.org/wiki/Main_Page?action=render

ดูเพิ่มเติม action=render เอกสาร

With the advent of RESTBase, on Wikimedia wikis you can instead request the cached HTML of a page, for example https://en.wikipedia.org/api/rest_v1/page/html/Main_Page Unlike ?action=render this returns a complete HTML document (i.e. <html><head>various metadata</head><body>...</body></html>); you could use an HTML parsing library to get the inner HTML of the <body> tag (see the documentation).

หากต้องการข้อมูลเพิ่มเติมที่กลั่นจาก wikitext ในเวลาแยกวิเคราะห์ (ลิงก์หมวดหมู่ส่วน ฯลฯ ) คุณสามารถ:

วิธีรับมือกับการเปลี่ยนแปลงของ API ปี 2015?

พฤติกรรมการเปลี่ยนแปลงค่ามาตรฐานอย่างต่อเนื่องใน MediaWiki 1.26 หากคุณมีความประสงค์จะเพิ่มข้อมูลพื้นฐานจากการตอบสนองอย่างต่อเนื่องของระบบของ API "คุณจะต้องอัพเดทรหัสของคุณ" ไม่ว่าจะ

นอกจากนี้เนื่องจากมีเดียวิกิ 1.25 เป็น โครงสร้างการแสดงผลที่ดีขึ้นสำหรับรูปแบบ JSON และ PHP สามารถใช้งานได้ถ้าคุณเพิ่ม formatversion=2 ในคำขอของคุณ ตั้งแต่เดือนกรกฎาคม 2015 เป็นต้นไปนี้ถือว่ายังคงมีการทดลองเนื่องจากโมดูล API บางส่วนอาจได้รับการปรับปรุงเพิ่มเติมในโหมดนี้ หากคุณยินดีที่จะเสี่ยงต่อการเปลี่ยนแปลงในอนาคตเพื่อปรับตัวให้ดีขึ้นการประมวลผลผลลัพธ์ของ API ด้วย formatversion=2

ทำไม ...

หากปรากฏ HTTP 403 errors?

This could mean you are not passing a User-Agent HTTP header or that your User-Agent is empty or blacklisted m:User-Agent policy. See API:Client code for more information. Also, it could mean that you are passing & in the query string of a GET request: Wikimedia blocks all such requests, use POST for them instead.

ฉันได้รับข้อผิดพลาด readapidenied?

wiki ที่คุณกำลังสืบค้นมีเนื้อหาส่วนตัวและต้องการให้ผู้ใช้เข้าสู่ระบบเพื่อให้สามารถอ่านหน้าเว็บทั้งหมดได้ ซึ่งหมายความว่าลูกค้าต้องเข้าสู่ระบบเพื่อสืบค้นข้อมูลใด ๆ ผ่านทาง API ดู API:ล็อกอิน สำหรับข้อมูลเพิ่มเติม ขณะนี้ยังไม่สามารถค้นหาเนื้อหาของหน้าเว็บที่อนุญาตพิเศษได้โดยไม่ต้องลงชื่อเข้าใช้แม้ว่าจะพร้อมใช้งานในอินเทอร์เฟซผู้ใช้ปกติ

หากปรากฏ badtoken errors?

This is usually because you are either not passing a token at all (read about tokens in the documentation of the module you are using) or because you are having trouble staying logged in. It's also possible you are reusing a type of token that can't be reused (see module documentation for details) or that you are using a token that's associated with an expired session. In general, when using cached tokens, refetch the token (see API:Tokens) and try again before giving up.

do I get warnings instead of tokens (Action 'edit' is not allowed for the current user)?

You either don't have the right to execute the action you requested, or you are having trouble staying logged in.

หากปรากฏ mustposttoken error?

The action you are attempting must be requested using HTTP POST. You probably clicked on api.php URL in a browser or modified an existing URL in the browser's location field, but that results in an HTTP GET request. You have to use a library (such as the mediawiki.api ResourceLoader module) or utility that can make POST requests; usually you also have to provide it your session cookies and an API:token so MediaWiki can verify that you are the logged-in user with rights to perform the action. As a hack, you might be able to use the cURL command-line utility, providing it each API parameter with -F 'action=delete' -F 'token=hexadecimal stuff+\' and the necessary browser cookies with -H 'Cookie:your session cookies'. The Network panel of the browser developer tools window (Ctrl+Shift+I) in Firefox and chromium has a "Copy as cURL" menu item that can help, but it's still fiddly.

Depending on what you want to do it's easier to learn how to use a bot or library that handles the details of login, cookies, and tokens for you.

is X not available through the API?

Not all features available in the user interface are available through the API. Such features weren't implemented either because no one has gotten around to it yet or because no one has requested them. For information about filing feature requests, see above.

does my API call on Wikimedia wikis just return an HTML error?

If you use API calls with POST requests make sure that these requests don't use Content-Type: multipart/form-data. This happens for instance if you use CURL to access the API and you pass your POST parameters as an array. The Squid proxy servers which are used at frontend servers at the Wikimedia wiki farm don't handle that correctly, thus an error is returned.

Instead, use the "value1=key1&value2=key2..." notation to pass the parameters as a string, similar to GET requests.

On other wikis which you access directly it doesn't make a difference.

In addition, some software (such as cURL) send an Expect: 100-continue header for longer POST requests (>1024 bytes). The wikimedia wikis that go through Squid servers can't cope with this. If you are still getting HTML errors with post requests, and are not logged in, try setting a blank Expect header (e.g. using cURL on the command line, use the option --header 'Expect:').

do really long API urls not work?

There is a maximum limit of the url size that can be used with the API when making GET requests. This limit varies depending on the website. Wikimedia's limit is roughly around 8100 characters. To get around this limit use POST requests instead (you may also need to set the Expect header, as described above)