目次

Web取込機能について

Web取込機能は、Webページに表示されている文字列を ことせかい に取り込む機能です。 全てのWebページを取り込めるわけではありませんが、いくつかの対応サイト等では既存の なろう検索 で取得した小説と遜色のない形で文書を取り込むことができるはずです。

Web取込機能について、簡単な使い方と、うまく動かない場合の例を動画にしてみました。ざっくりと使い方を知るためには動画を観るのもいいかもしれません。

Web取込機能の使い方

動画のものと重複するところもありますが、Web取込機能の使い方について書き下しておきます。

Web取込機能を使うには、ことせかい の「Web取込」タブを利用します。 Web取込タブにて、取り込みたい内容を表示した状態で、右下にあります「取り込む」ボタンを押すことでそこに表示されている文字列を借り読み込みで取り込みを開始します。

「取り込む」ボタン

借り読み込みが完了すると、読み込まれた文字列やタイトル等の情報がダイアログて表示されます。

借り読み込み結果のダイアログ例
この画面に表示されている情報で問題がなければ「このまま取り込む」ボタンを押すことで、指定されたタイトルで本棚に登録されます。

本棚に登録された文書は、自作小説とほぼ同じ扱いとなりますので、タイトルや本文の修正が可能です。 また、借り読み込み結果のダイアログで「続ページ:有り」と表示されたものについては、表示されている物以降に続く文書を別の章として順次読み込んでいきます。 この続ページについては、設定タブの「小説の自動更新」がONになっている時には定期的に続ページが更新されているかどうかを確認して、更新があった場合には新しい章として追加します。

細かな機能

Web取込機能はWebブラウザを内包しておりますので(そのおかげで一旦レーティングが17+になりましたが、通常の方法ではGoogleへとアクセスできなくすることでレーティングを9+に戻しました)、所謂普通のWebブラウザっぽい事ができるようにしてあります(けれども、本気のWebブラウザを作ろうとするととても大変なので、簡易版という感じで作成しております)。 以下に、ざっと画面構成とそれぞれの説明を記しておきます。

Web取込タブは以下のようなボタン等があります。

Web取込タブの画面
  1. 戻るボタン: 元のWebページに戻ります
  2. 進むボタン: 戻るボタンで戻っていた場合、先のWebページに進みます
  3. ホームボタン: 最初のページに戻ります
  4. ブックマークボタン: よく使うページをブックマークできます。ブックマークしたものは最初のページに追加されます。ブックマークされているページでは栞のアイコンにチェックマークがつきます。(なお、ブックマークされているWebページでブックマークボタンを押すとブックマークが消えてしまいます。もし全てのブックマークを消してしまうとどこのWebサイトへも行けなくなってしまいますので、標準のブックマークを置いておきます。Safari等でダウンロードして「ことせかい にコピー」等を選んでブックマークを取り込んでください。(多分 ことせかい側 のWeb取込タブからだとうまく取り込めない気がします)
  5. リロードボタン: Webページを再読込します
  6. 取り込みボタン: 現在表示されているWebページの文字列を、ことせかい に取り込みます
  7. URLバー: 現在表示されているWebページのURLが表示されます。URLを直接入力することはできませんけれども。(これは、「無制限のWebアクセス」というレーティングを17+に引き上げる要因になるためです)

Safari からの取込

このWeb取込機能は、Safariからも利用することが可能です。 Safariから利用する機能は、Safari のシェアボタンを利用します。(それ以外のアプリからのシェアボタンでは恐らくは正常に機能しません)ですので、まずは Safari を起動してください。 Safari にはシェアボタン(四角い箱から上向きの矢印が出ているボタン)があります。表示されていない場合はページを一番上までスクロールさせてみると出てくると思います。

Safari のシェアボタン
シェアボタンを押すと、カラーのアイコンの行と白黒のアイコンの行が出て来ると思います。「ことせかい へ読み込む」機能は白黒のアイコンの行に属しています。もし、「ことせかい へ読み込む」のボタンが無い場合は、白黒のアイコンの行を横にスクロールしていって「その他」を選んだ先に出てくる「ことせかい へ読み込む」機能をONにしてください(ついでに、iOS 13以降であればアクションリストの一番下にあります「アクションを編集…」で「ことせかい へ読み込む」を追加(左側の「+」マーク)したり、iOS 12以前であれば「ことせかい へ読み込む」の位置を上にズラしておくと少し便利になるかもしれません)。「ことせかい へ読み込む」ボタンが表示されるとこのようになります。
ことせかい へ読み込むボタン
このボタンを押すと、「このページを"ことせかい"で開きますか?」といったダイアログが出ます。 このダイアログで「開く」を選択すると、ことせかい アプリへと移動します。 ことせかい アプリに移動した後は、借り読み込み結果のダイアログが出ます。この後の操作についてはWeb取込機能と同じです。

Web取込機能の仕組み

Web取込機能はWeb上で発表される小説を読み込むために、以下のような仕組みを導入しています。

  1. 表示されている文字のうち、内容の部分だけを抜き出す
  2. 複数ページにわたる小説の場合、続くページを取得する
  3. 小説のタイトルを抜き出す
  4. 小説の作者名を抜き出す
これらは全てxpathを用いてHTML内の要素を抽出しています。 このxpathの情報は「SiteInfo」と呼んでいるデータベースで管理されています。 標準の SiteInfo は、ことせかい の開発者が管理している Googleスプレッドシート から配信されていて、アプリはこれを定期的にダウンロードして利用します。 また、「設定タブ」→「最優先SiteInfoを編集・追加」を使うと、この標準データよりも優先して適用される SiteInfo を自分で書くこともできます(詳しくは後述)。

(過去には wedata というサービス上の「ことせかいWebページ読み込み用情報」と「AutoPagerize」の二種類のデータベースを利用していましたが、wedata のサービス終了に伴い現在は利用していません。wedata のドメインは現在別のサイトになっていますのでご注意ください。)

うまくいかないサイトについて

ところで、SiteInfo に登録されていないWebページについては先程の4つの仕組みがうまく機能しません。 うまく機能しなかった場合は最初に挙げました動画の二つ目(うまくいかない場合)のように、表示されている全ての文字が取り込まれます。 これをなんとかするには、

  • そのまま取り込んだ後に編集を行うことで回避する
  • ご意見ご要望フォーム に、問題となったURL等の情報を添えて、「対応できたら嬉しいです」と投書する
  • 自分で SiteInfo を書く(「設定タブ」→「最優先SiteInfoを編集・追加」。後述)
という方法が考えられます(もっと素晴らしい方法があれば教えてください)。 一つ目の方法は毎回の作業になりますのでちょっと手間がかかると思いますが、自分だけの範囲で完結しますので一人で済ませたい人にはいいかもしれません。 二つ目の方法は今後同じWebサイトを何度も使う場合には良いと考えられますし、他のユーザが同じWebサイトを取り込もうとした時にも効果が出ます。が、この方法を大量の人から受けると ことせかい の開発者が大変になります(ことせかい の開発者は一人なので限界がありますことをご了承ください)。 三つ目の方法は xpath を書く技術が必要となりますが、アプリ内だけで完結して、書いたその場で動作確認とその端末への適用ができます。さらに、うまく動いた SiteInfo を開発者に送って頂ければ標準の SiteInfo に反映できるかもしれず、そうなると今後同じWebサイトを取り込もうとする他のユーザにも効果が出ます。編集作業自体に報酬は何も出ませんが、できましたらば、この手法で貢献して頂けると ことせかい の開発者としては嬉しいです。

SiteInfo(Webページ読み込み用情報) の編集について

以下に、SiteInfo を自分で編集しようとした時のガイドを書いておきます。

まず、現在の SiteInfo の運用について説明しておきます。

  • 標準の SiteInfo は、ことせかい の開発者だけが編集できる Googleスプレッドシート で管理・更新されていて、アプリはここから公開されているCSVを定期的にダウンロードして利用します(過去に利用していた wedata はサービス終了しており、ドメインも別のサイトになっているため現在は使われていません)。
  • ユーザの側で SiteInfo を編集したい場合は、「設定タブ」→「最優先SiteInfoを編集・追加」を使います。ここで保存した SiteInfo はその端末で標準データより優先して適用されます。
  • うまく動く SiteInfo が書けましたら、同じ画面の「CSVで書き出して共有(Export)」で書き出した内容を ご意見ご要望フォーム 等で開発者に送って頂けると、標準の SiteInfo に反映できるかもしれません。編集作業に貢献していただいても ことせかい の開発者側からは特に何の報酬も出せません事は予めご承知おきください。

SiteInfo の主な項目

SiteInfo の1エントリ(スプレッドシートの1行)は「あるWebサイトからどうやって小説を抜き出すか」の定義で、主に以下のような項目があります。 どのページのどの部分を抜き出すかは、基本的に xpath で指定します(xpath については後述)。

  • url: このエントリを適用するURLにマッチする正規表現。取り込もうとしているページのURLがこの正規表現にマッチした時に、そのエントリが使われます。
  • pageElementV2: 本文として取り込む部分の指定。少し特殊な書式なので後で詳しく説明します
  • title / subtitle / author / tag: それぞれ小説のタイトル・章のサブタイトル・作者名・タグを抜き出す xpath。
  • nextLink: 「次のページ」へのリンクを指す xpath。これが取れると続きのページを順次読み込めます。
  • firstPageLink: 目次ページ等から「最初のページ」へのリンクを指す xpath。
  • isNeedHeadless: JavaScript でページを描画するタイプのサイトで true にします(内部のWebブラウザで描画してから抜き出すようになります)。
このほかにも高度な項目(waitSecondInHeadless, nextButton, injectStyle, checkTargets 等)がありますが、まずは urlpageElementV2、必要なら titlenextLink あたりを書けば動くはずです。

「最優先SiteInfoを編集・追加」の使い方

「設定タブ」→「最優先SiteInfoを編集・追加」を開くと、この端末で編集された「最優先SiteInfo」の一覧と、アプリに読み込まれている「標準データ」の一覧が表示されます。

  1. 既存のサイトの動作を直したい場合は、「標準データ」から目的のサイトを選びます(内容を引き継いで編集できます)。SiteInfo に無い新しいサイトに対応したい場合は、右上の「+」で新規作成します。
  2. 項目を書き換えます。標準データと異なる値になった項目には ⚠️ マークが付きますので、意図しない項目を書き換えていないかの確認に使ってください。
  3. 「テスト用URL」に対象サイトの適当な小説ページのURLを1つ入れて、「この値で今すぐテスト」を押します。保存や本番データの書き換えをせずに、そのページから取得できる本文・タイトル等の値が表示されます。pageElementV2 等の書式ミスもここで警告として表示されます。
  4. うまく取れるようになったら「保存」します。以後、この端末ではこの内容が標準データより優先して適用されます。
  5. 標準の動作に戻したい時は、一覧に戻って「編集」ボタンからその行を削除します。
なお、画面の一番上にも表示されますが、SiteInfo は下手に書き換えると ことせかい が正常に動作しなくなる可能性があります。何かおかしくなった場合は「最優先SiteInfo」の行を全て削除すれば標準の動作に戻ります。

pageElementV2 の書き方

pageElementV2 は「本文としてどの要素を取り込むか」を指定する項目で、以前の pageElement の後継です(スプレッドシート上の pageElement 列は旧バージョンのアプリ向けに pageElementV2 から自動生成される数式列になっているので、編集するのは pageElementV2 の方です)。 書き方には次の2通りがあります。

1. 1行だけで書く場合: 値の全体がそのまま本文の xpath として扱われます。従来の pageElement と同じです。複数の要素を取り込みたい場合は xpath を | で繋げます。

//div[@id='novel_honbun']

2. 複数行で書く場合: 「取り込み対象」を複数定義する書式になります。1行につき1つの取り込み対象を、

ID:日本語タイトル/English title=xpath
という形式で書きます。例えば標準データのハーメルン用エントリは以下のようになっています。
1:本文/main content=//div[@id='honbun']
2:前書き/Preface=//div[@id='maegaki']
3:後書き/Afterword=//div[@id='atogaki']

複数行で書くと、そのサイトの取り込み対象をユーザが選べるようになります。具体的には、

  • 「設定タブ」→「Webサイト毎の取り込み対象を指定する」(取り込み対象が2つ以上定義されているサイトだけが一覧に出ます)
  • 小説の詳細画面の「この小説の取り込み対象を指定する」(小説ごとの指定。Webサイト毎の指定より優先されます)
に、各行のタイトル(「本文」「前書き」「後書き」等)がチェックリストとして表示され、例えば「前書きと後書きは読み上げたくない」といった希望に応じてユーザがそれぞれの取り込みのON/OFFを選べるようになります。

書式の細かい規則は以下の通りです。誤解しやすいので気をつけてください。

  • 1行だけか複数行かは「値の中に改行があるかどうか」だけで判定されます。改行が1つでもあると全ての行が ID:タイトル=xpath 形式である必要があります。逆に、1行だけで書く場合は xpath の途中で改行してはいけません。
  • ID: 行の最初の : より前の部分。空にはできず、: そのものを含められません。標準データでは 1, 2, 3 のような連番にしています。
  • タイトル: 最初の : から最初の = までの部分。/ で区切って「日本語タイトル/英語タイトル」の順で書きます。英語タイトルは省略できます(その場合は英語UIでも日本語タイトルが表示されます)。この規則上、タイトルに = を、日本語タイトルに / を含めることはできません。
  • xpath: 最初の = から行末までの全部。xpath 自体に =: が含まれるのは問題ありません。
  • 形式に合わない行は警告なく無視されます。SiteInfoエディタの「この値で今すぐテスト」を使うと、書式ミスが警告として表示されますので活用してください。

動作の仕組みと、書く時に注意して欲しい点も挙げておきます。

  • 実際の本文抽出時には、選択されている対象の xpath を | で繋いだ1つの xpath として評価します。そのため、各行の xpath は | で結合されても壊れない式にしてください。
  • ユーザが何も設定していない場合や、チェックを全て外した場合は「全ての対象を取り込む」扱いになります。
  • SiteInfo 側に新しい ID の行が追加された場合、ユーザが設定画面で確認するまでは取り込み対象として扱われます(SiteInfo の更新で勝手に本文が欠けてしまわないようにするためです)。
  • ユーザの選択は ID に紐付いて保存されます。そのため、一度公開した ID は変えないでください。ID を変えたり、複数行を1行に戻したりすると、ユーザの選択が引き継がれません(なお、1行だけで書いた場合は内部的には ID 1・タイトル「本文」の取り込み対象1つとして扱われます)。
  • 取り込み対象やxpathの変更が既に取り込み済みの小説の本文に反映されるのは、次にその小説をダウンロードした時(再ダウンロードや続きの取得)からです。

xpath について

xpath は XML や HTML の文書について、そのエレメント(特定の部分)を指定するための言語です。「xpath 書き方」で検索 したりすると、ざっくりとした書き方とかは解るかと思います。

xpath を書く時について

xpath の書き方について、私がやっている方法をざっと説明しておきます。
  1. Google chrome で目的のWebサイトを開きます
  2. デベロッパーツールをONにします
  3. デベロッパーツールの左上にある四角に矢印がついているようなアイコンで、HTMLのエレメントを選択できるようにして、xpathを書きたいエレメントを選択します
  4. Elementsタブで目的のエレメントが選択された状態になるので、そのエレメントが選択できるようなxpathを考えます
  5. xpathを考えたら、Consoleに
    document.evaluate("//ul[@class='about']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0)
    といった感じで入力して xpath を実際に動作させてみて選択されることを確認します(この例では "//ul[@class='about']" の部分が xpath です
  6. 問題なく選択されているのを確認して、その xpath を SiteInfoエディタ(「最優先SiteInfoを編集・追加」)に書いて「この値で今すぐテスト」で確認します
パソコンで操作している場合、Webサイトによってはモバイル版のページを開かねばならないことに注意してください。

編集内容の反映とキャッシュについて

「最優先SiteInfoを編集・追加」で保存した内容は、保存した時点からその端末で有効になります。また、同じ画面の「この値で今すぐテスト」も保存前の値でそのまま検査できますので、SiteInfo の動作確認のために特別なデバッグモード等は必要ありません。

一方、標準の SiteInfo(Googleスプレッドシートから配信される分)は、毎回読み込んでしまうのは冗長であるということから、一定の時間(だいたい1日位)はlocalに保存されたキャッシュを参照するようにしています。標準データの更新をすぐに反映させたい場合は、「設定タブ」の「SiteInfoを読み直す」を使ってください。

また、上級者向けの機能として、「設定タブ」→「内部データ参照用URLの設定」の「ことせかい用SITEINFO」欄に自前でホストしたCSVのURLを指定することで、標準の SiteInfo ごと差し替えることもできます。

これらの機能をうまく使って SiteInfo を編集して頂き、うまく動いたものを開発者まで送って頂けるととても助かります。よろしくお願いします。

Safari のシェアボタンから「ことせかい へ読み込む」が無くなってしまう事がある場合について

こちらなのですが、iOS(又は iPad OS)を再起動すると直る事があるという話があるので、一度それを試してみて下さい。