質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

934閲覧

RubyGem、Wikipedia-clientにて概要が取れない記事?

decatail

総合スコア43

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/11/20 08:59

Wikipediaの情報を引っ張ってこれる「Wikipedia-client」というGemを使っています。以下のようなプログラムを実行すると、「メジャーリーグベースボール」の記事の概要を取ってくれます。

Ruby

1# WikipediaAPIを使おう 2require 'wikipedia' 3 4# 日本語版Wikipediaを利用する 5Wikipedia.Configure { 6 domain 'ja.wikipedia.org' 7 path 'w/api.php' 8} 9 10# 記事を取得 11page = Wikipedia.find('大リーグ') 12 13# サマリーを標準出力 14puts page.summary

これは、「大リーグ」で調べると「メジャーリーグベースボール」への記事に転送されて、その記事の概要を取ってくれるというものです。しかし、取ってくれないものもあります。

たとえば、

Ruby

1page = Wikipedia.find('ソニー')

このようにするとソニーの概要を取ってくれます。また、「Sony」や「sony」とするとブラウザ上では「ソニー」に転送されます。しかし、

Ruby

1page = Wikipedia.find('Sony')

Ruby

1page = Wikipedia.find('sony')

このようにすると概要を取ってくれません。同じように

Ruby

1page = Wikipedia.find('アメリカ合衆国') #これはOK!

Ruby

1page = Wikipedia.find('米国') #これは駄目

Ruby

1page = Wikipedia.find('アメリカ') #これも駄目

「米国」「アメリカ」だと、ブラウザ上では「アメリカ合衆国」の記事に跳ぶのですが、「大リーグ」のように概要を取ってくれません。

この理由がわかる方、また解決策をお持ちの方おられましたら御教授願います。

ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20] wikipedia-client (1.16.0)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

英語版ではリダイレクトされるページでは #REDIRECT ... という文字列が返ってきますが、
日本語版だと #転送 ... というのが返ってきます。

そのため、リダイレクトの判定に失敗しているようです。

モンキーパッチを当てたら解決できました。

ruby

1class Wikipedia::Page 2 def redirect? 3 content && content.match(/\#(?:REDIRECT|転送)\s*[[(.*?)]]/i) 4 end 5end

ruby

1require "wikipedia" 2 3# monkey 4class Wikipedia::Page 5 def redirect? 6 content && content.match(/\#(?:REDIRECT|転送)\s*[[(.*?)]]/i) 7 end 8end 9 10Wikipedia.Configure { 11 domain 'ja.wikipedia.org' 12 path 'w/api.php' 13} 14 15Wikipedia.find("Sony").summary # => "ソニー株式会社(英: Sony Corporation)は..."

投稿2021/11/21 00:04

neko_daisuki

総合スコア2090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

decatail

2021/11/21 02:34

コメント大変ありがとうございました。「大リーグ」で転送先の概要を表示できたのは、 https://ja.wikipedia.org/w/index.php?title=大リーグ&type=revision&diff=6181988&oldid=2189680 ここに記載されているように「#REDIRECT [[メジャーリーグベースボール]]」としてくれているからなのですね。一方で「Sony」だと https://ja.wikipedia.org/w/index.php?title=Sony&type=revision&diff=82755802&oldid=2172237 このように「#転送 [[ソニー]]」となっていると。 非常に助かりました。大変ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問