2017-06-19 10 views
0

私はpywikibotを使ってwikidataからデータにアクセスしようとしています。私はコードではなく、データオブジェクトの名前でこれをしようとしています。 私はこのスクリプトを実行すると:pywikibotでwikidataにログインするには

import pywikibot 


site = pywikibot.Site("wikidata", "wikidata") 
repo = site.data_repository() 
token = repo.token(pywikibot.Page(repo, 'Main Page'), 'edit') 

を私は、このエラーメッセージが表示されます:

Traceback (most recent call last): 
    File "/Users/this-user/PycharmProjects/teststuff/src/pywikibot_stuff/wikipedia/test.py", line 6, in <module> 
    token = repo.token(pywikibot.Page(repo, 'Main Page'), 'edit') 
    File "/Users/this-user/Library/Python/3.6/lib/python/site-packages/pywikibot/tools/__init__.py", line 1337, in wrapper 
    return obj(*args, **kwargs) 
    File "/Users/this-user/Library/Python/3.6/lib/python/site-packages/pywikibot/site.py", line 3495, in token 
<class 'AssertionError'> 
    return self.tokens[tokentype] 
    File "/Users/this-user/Library/Python/3.6/lib/python/site-packages/pywikibot/site.py", line 1785, in __getitem__ 
    assert self.site.user(), 'User must login in this site' 
AssertionError: User must login in this site 
CRITICAL: Closing network session. 

私は次のスクリプトを実行したとき(Q9684がためにウィキデータコードであるため、しかし、これは、私に混乱してニューヨーク・タイムズ紙):

import pywikibot 

site = pywikibot.Site('wikidata', 'wikidata') 
repo = site.data_repository() 
item = pywikibot.ItemPage(repo, 'Q9684') 

item_dict = item.get() 
aliases = item_dict['aliases'] 
aliases = [aliases[key] for key in aliases] 
aliases = [alias for sublist in aliases for alias in sublist] 


print(aliases 

すべてが正常に動作し、私が手:

['NY Times', 'New York Times', 'The Gray Lady', 'Gray Lady', 'NYT', 'TNYT', 'nytimes.com', 'New-York Daily Times', 'The New-York Times', 'NY Times', 'NY Times', 'New York Times', 'New York Times', 'NYT', 'NY Times', 'NY Times', 'New York Times', 'The Gray Lady', 'Gray Lady', 'The Grey Lady', 'Grey Lady', 'New York Times', 'NYT', '紐約時報', 'nytimes.com', 'New York Times', 'The New York Daily Times', 'NY Times', 'New York Times', 'NYT', 'The Gray Lady', 'The New York Times', 'Нью-Йорк Таймс', 'NY Times', 'New York Times', 'NYT', 'نيو يورك تايمز'] 

私はまた、ランニング試してみました:

import pywikibot 

site = pywikibot.Site('wikidata', 'wikidata') 
repo = site.data_repository() 
item = pywikibot.Page(site, 'New York Times') 
item_dict = item.get() 

print(item_dict) 

しかし、私はエラーを取得する:

pywikibot.exceptions.NoPage: Page [[wikidata:New York Times]] doesn't exist. 

私user-config.pyファイルが同じディレクトリにあり、次のようになります。

family = 'wikidata' 
mylang = 'en' 
usernames['wikidata']['wikidata'] = u'ExampleBot' 

#console_encoding = 'utf-8' 
#use_api_login = True 

最後の2行のコメントを外しても違いはありません。

ここで問題を知っている人はいますか? Pywikibotがなぜ「ニューヨークタイムズ」を検索するときにログインするのを望んでいるのですか?

答えて

0

wikidataのアイテムのページのタイトルは「Q」IDです。

>>> item.exists() 
False 

とitem.get()ウィキデータサイトの失敗:そのため

item = pywikibot.Page(site, 'New York Times') 

は存在しないページが作成されます。あなたは実行する必要があり :

item = pywikibot.Page(site, 'Q9684') 

トークンがちょうど取得し、そのためにあなたは、ログインする必要はありませリポジトリで物事を編集するために取られ

0

But then I get the error:

pywikibot.exceptions.NoPage: Page [[wikidata:New York Times]] doesn't exist. 

これが発生するため。 Wikidataのメインネームスペースには本当に「New York Times」という名前のページはありません。代わりの

wpsite = pywikibot.Site('en', 'wikipedia') 
wppage = pywikibot.Page(wpsite, 'The New York Times') 
item = pywikibot.ItemPage.fromPage(wppage) 

:あなたはWikipediaのページタイトル(複数可)を強要知っていればあなたは自分のウィキデータ項目IDを取得したい場合、そして、あなたはとてもこれを行うことができます

item = pywikibot.Page(site, 'New York Times') # this is wrong 

を、実際に、あなたはよトークン= repo.token ...と行を必要としない場合、Wikidataを編集するには、フレームワーク関数を使用します。 詳細を参照してくださいhereとそのページの下部に記載されているページのリンクにアクセスします。

関連する問題