addwiki / wikibase-api
Wikibase API 库
3.0.0
2021-10-23 08:50 UTC
Requires
- php: >=7.4
- addwiki/mediawiki-api-base: ^3.0
- addwiki/mediawiki-datamodel: ^3.0
- serialization/serialization: ~3.2||~4.0
- wikibase/data-model: ~9.2||~8.0
- wikibase/data-model-serialization: ~2.0
- wikibase/data-model-services: ~3.0
Requires (Dev)
- data-values/common: ~0.4.0
- data-values/data-values: ~2.0
- data-values/geo: ~4.0
- data-values/number: ~0.10.0
- data-values/serialization: ~1.0
- data-values/time: ~1.0
- data-values/validators: ~0.1.0
- mediawiki/mediawiki-codesniffer: ~35.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpunit/phpunit: ~9
README
问题跟踪器: https://github.com/addwiki/addwiki/issues
安装
使用 composer 安装库及其所有依赖项
composer require "addwiki/wikibase-api:~3.0"
示例用法
该库为用户提供了一大批服务。这些服务应从 WikibaseFactory 类中检索。
以下是一些使用各种服务的示例。每个示例都是基于前一个示例(以便不重复第一步)。注意:此库使用命名空间,请务必添加相关的 use 语句。
加载 & 一般设置
require_once( __DIR__ . '/vendor/autoload.php' ); $api = new MediawikiApi( 'http://localhost/w/api.php', new UserAndPassword( 'username', 'password' ) ); // Create our Factory, All services should be used through this! // You will need to add more or different datavalues here. // In the future Wikidata / Wikibase defaults will be provided in a separate library. $dataValueClasses = array( 'unknown' => 'DataValues\UnknownValue', 'string' => 'DataValues\StringValue', 'boolean' => 'DataValues\BooleanValue', 'number' => 'DataValues\NumberValue', 'globecoordinate' => 'DataValues\Geo\Values\GlobeCoordinateValue', 'monolingualtext' => 'DataValues\MonolingualTextValue', 'multilingualtext' => 'DataValues\MultilingualTextValue', 'quantity' => 'DataValues\QuantityValue', 'time' => 'DataValues\TimeValue', 'wikibase-entityid' => 'Addwiki\Wikibase\DataModel\Entity\EntityIdValue', ); $wbFactory = new WikibaseFactory( $api, new Addwiki\Wikibase\DataModel\DataModelFactory( new DataValues\Deserializers\DataValueDeserializer( $dataValueClasses ), new DataValues\Serializers\DataValueSerializer() ) );
创建一个空实体
创建一个新的空条目。
$saver = $wbFactory->newRevisionSaver(); $edit = new Revision( new ItemContent( Item::newEmpty() ) ); $resultingItem = $saver->save( $edit ); // You can get the ItemId object of the created item by doing the following $itemId = $resultingItem->getId()
设置标签
假设 Q87 存在,在条目上设置一个英文标签,使用自定义摘要。
$getter = $wbFactory->newRevisionGetter(); $entityRevision = $getter->getFromId( 'Q87' ); $entityRevision->getContent()->getData()->setDescription( 'en', 'I am A description' ); $saver->save( $entityRevision, new EditInfo( 'Custom edit summary' ) );
创建一个新的声明
如果该属性没有声明,则在条目 Q777 上创建一个新的字符串声明。
$statementCreator = $wbFactory->newStatementCreator(); $revision = $getter->getFromId( 'Q777' ); $item = $revision->getContent()->getData(); $statementList = $item->getStatements(); if( $statementList->getByPropertyId( PropertyId::newFromNumber( 1320 ) )->isEmpty() ) { $statementCreator->create( new PropertyValueSnak( PropertyId::newFromNumber( 1320 ), new StringValue( 'New String Value' ) ), 'Q777' ); }
使用 GUID 删除声明
删除具有给定索赔的声明(如果存在)
$statementRemover = $wbFactory->newStatementRemover(); $statementRemover->remove( 'Q123$f12bd80f-415a-c37e-9e18-234b9e19eece' );
向声明添加引用
$statementSetter = $wbFactory->newStatementSetter(); $revision = $getter->getFromId( 'Q9956' ); $item = $revision->getContent()->getData(); $statementList = $item->getStatements(); $referenceSnaks = array( new PropertyValueSnak( new PropertyId( 'P44' ), new StringValue( 'bar' ) ), ); foreach( $statementList->getByPropertyId( PropertyId::newFromNumber( 99 ) )->getIterator() as $statement ) { if( $statement->getReferences()->isEmpty() ) { $statement->addNewReference( $referenceSnaks ); } }
尝试合并 2 个条目
如果可能,尝试合并 Q999 和 Q888,并捕获任何错误。
try{ $wbFactory->newItemMerger()->merge( 'Q999', 'Q888' ); } catch( UsageException $e ) { echo "Oh no! I failed to merge!"; }
简单查找
轻松查找条目对象、单个标签和重定向来源。
$itemId = new ItemId( 'Q555' ) $itemLookup = $wbFactory->newItemLookup(); $termLookup = $wbFactory->newTermLookup(); $entityRedirectLookup = $wbFactory->newEntityRedirectLookup(); $item = $itemLookup->getItemForId( $itemId ); $enLabel = $termLookup->getLabel( $itemId, 'en' ); $redirectSources = $entityRedirectLookup->getRedirectIds( $itemId );