CustomSearchControl を使用する場合、表示しているページによって結果ページの数が異なります。たとえば、このサイトにアクセスして次のように検索します。
最初の結果ページでは 3 ページへのリンクが表示されますが、2 または 3 をクリックすると 2 ページで終了します。
これはなぜ起こりますか? また、回避策はありますか?
結果の実際の数を取得し、独自のページネーションを作成することが可能であれば?
CustomSearchControl を使用する場合、表示しているページによって結果ページの数が異なります。たとえば、このサイトにアクセスして次のように検索します。
最初の結果ページでは 3 ページへのリンクが表示されますが、2 または 3 をクリックすると 2 ページで終了します。
これはなぜ起こりますか? また、回避策はありますか?
結果の実際の数を取得し、独自のページネーションを作成することが可能であれば?
その理由は、Google は利用可能な結果の数のみを見積もっているためです。各ページを読み込むと、見積もりが精緻化されるため、ページ数が変化します。
customSearchControl.searcher.cursor オブジェクトの EstimatedResultCount プロパティを確認できますが、CSE がページネーション自体を生成するために使用する見積もりにすぎないため、残念ながら役に立ちません。(各ページが読み込まれるたびに、新しい見積もりに変更されます。) resultCount プロパティもありますが、これは下位互換性のためだと思います。
残念ながら、CSE もその見積もりを記憶できるほど賢くありません。したがって、推定値 127 から始めて、最後のページに移動して 94 にし、最後から 2 番目のページに移動して 120 にすることができます。 94 を超えることはありません。ですから、本当にやりたいのであれば、少なくとも最小値を追跡する独自のページネーションを作成できると思います。それは一般的に(常に?)最後のページにあるように見えるので、可能な限り良いものにする必要がある場合は、プログラムで最後のページをロードし、見積もりを取ってページネーションを構築してから、ユーザーの最初のページに戻すことができます.
そのルートに進むことにした場合は、customSearchControl.searcher.cursor.gotoPage(page) 関数を使用して独自のページネーションを作成できます。( https://developers.google.com/web-search/docs/reference#_class_GSearch )