🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3947閲覧

pixivの作品ページ(またはブクマページ)からブクマ数を取得して検索画面に表示する

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2019/12/15 14:50

編集2019/12/16 19:03

前提・実現したいこと

pixivの検索結果にブクマ数が表示されなくなったため、リンク先の作品ページなどからブクマ数を取得して検索結果に表示するGreasemonkey用のユーザースクリプトを自作しています。
初挑戦のため、完全に自分用として、既存のスクリプトを改造するかたちで進めていますが、$.ajaxで取得したHTMLからブクマ数を参照することができずにいます。

発生している問題・エラーメッセージ

undefinedや[object object]が表示される。

該当のソースコード

javaScript

1 2 3function addSize(illusts, stop) { 4 if (illusts.length > 0) { 5 $.each(illusts, function (i, a) { 6 $.ajax({ 7 url: a, 8 type: 'GET', 9 dataType: 'html', 10 async: false, 11 success: function (BMhtml) { 12 var bm = $(BMhtml).find('.sc-LzMXg gYkuYy'); 13 $('<div class="size" style="color:#cccccc;">').html(bm).appendTo(a); 14 a.classList.add('addsize'); 15 } 16 }); 17 }); 18

既存のスクリプトを流用し、検索結果からイラストページへのリンク(https://www.pixiv.net/artworks/~)をillustsとして取得しています。
console.logで見た感じ、リンク先イラストページのHTMLは取得できてるようですが、そこから先、ブクマ数のある要素を取得できません。

*追記*
console.log(BMhtml)の結果はこちらです。
(ID等は○で伏せています)
検索結果ページから取得した約60件分あります。

JSONに近い感じ?ではありますが、bookmarkCountのデータはあるよです。
.findでブックマーク数が記載されているclass名を検索したconsole.log(bm)の結果は、Object { length: 0, prevObject: Object[56], context: undefined, selector: ".sc-LzMXg gYkuYy" }
で、検索画面にもブクマ数ではなく[object Object]が表示されます。

<!DOCTYPE html> <html lang="ja"xmlns:wb="http://open.weibo.com/wb"><head><meta name="viewport" content="width=1366"><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://www.pixiv.net/favicon.ico"><title>#ファンタジー ○○○○○○○○○○○○○○○○○○ - ○○○○○○○のイラスト - pixiv</title><link rel="canonical" href="https://www.pixiv.net/artworks/○○○○○○○○"><link rel="alternate" hreflang="ja" href="https://www.pixiv.net/artworks/○○○○○○○○"><link rel="alternate" hreflang="en" href="https://www.pixiv.net/en/artworks/○○○○○○○○"><meta property="twitter:card" content="summary_large_image"><meta property="twitter:site" content="@pixiv"><meta property="twitter:url" content="https://www.pixiv.net/artworks/○○○○○○○○?ref=twitter_photo_card"><meta property="twitter:title" content="○○○○○○○○○○○○○○○○○○"><meta property="twitter:description" content="○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○"><meta [...] 略 "likeData":false,"width":1103,"height":1729,"pageCount":1,"bookmarkCount":10,"likeCount":11,"commentCount":0,"responseCount":0,"viewCount":93,"isHowto":false,"isOriginal":true,"imageResponseOutData":[],"imageResponseData":[],"imageResponseCount":0,"pollData":null,"seriesNavData":null,"descriptionBoothId":null,"descriptionYoutubeId":null,"comicPromotion":null,"fanboxPromotion":null,"contestBanners":[],"isBookmarkable":true,"bookmarkData":null,"contestData":null,"zoneConfig":{"responsive":{"url":"https://pixon.ads-pixiv.net/show?zone_id=illust_responsive&amp;format=js&amp;s=2&amp;up=0&amp;a=29&amp;ng=w&amp;l=ja&amp;uri=%2Fartworks%2F_PARAM_&amp;is_spa=1&amp;K=f4f40d6558a&amp;ab_test_digits_first=50&amp;Yuid=KSVAARA&amp;suid=Pg9z3s9oqqeebz5i&amp;num=5df7c670647&amp;p=2&amp;t=3ze0RLmk59&amp;t=6sZKldb07K&amp;t=DN6RDM1CuJ&amp;t=IfpAckJr8v&amp;t=OT-C6ubi9i&amp;t=jfnUZgnpFl&amp;t=pvU1D1orJa&amp;t=vnKYHqMYrx"},

ブックマークページの場合のconsole.log(BMhtml)結果はこちらです。
イラストページとは違い、実際のページの要素を調査したHTMLそのままに近い感じです。
こちらのconsole.log(bm)結果は
Object { length: 0, prevObject: Object[132], context: undefined, selector: ".bookmark-count _ui-tooltip" }
で[object Object]が表示されます。

<!DOCTYPE html> <html lang="ja" class="" xmlns:wb="http://open.weibo.com/wb"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=970"> <meta name="format-detection" content="telephone=no"> <meta property="og:site_name" content="pixiv"> <meta property="fb:app_id" content="140810032656374"> <meta property="wb:webmaster" content="4fd391fccdb49500" /> <meta property="twitter:card" content="summary_large_image"> <meta property="twitter:site" content="@pixiv"> <meta property="twitter:title" content="イラストコミュニケーションサービス [pixiv]"> <meta property="twitter:description" content="pixiv(ピクシブ)は、作品の投稿・閲覧が楽しめる「イラストコミュニケーションサービス」です。幅広いジャンルの作品が投稿され、ユーザー発の企画やメーカー公認のコンテストが開催されています。"> <meta property="twitter:image" content="https://s.pximg.net/www/images/pixiv_logo.gif?2"> <meta property="og:image" content="https://s.pximg.net/www/images/pixiv_logo.gif?20130523"> <meta property="og:description" content=[...] 略 <div class="layout-body"><section class="_unit bookmark-detail-unit"><div class="thumbnail-container"><a href="/member_illust.php?mode=medium&amp;illust_id=○○○○○○○○" class="work _work "><div class="_layout-thumbnail"><img src="https://i.pximg.net/c/150x150/img-master/img/2019/12/16/02/11/56/○○○○○○○○_p0_master1200.jpg" alt=""></div></a></div><div class="bookmark-container"><ul class="count-list"><li><a href="/bookmark_detail.php?illust_id=○○○○○○○○" class="bookmark-count _ui-tooltip" data-tooltip="10件のブックマーク"><i class="_icon _bookmark-icon-inline"></i>10</a></li></ul><a href="/bookmark_add.php?type=illust&amp;illust_id=○○○○○○○○" class="_button">ブックマークに追加</a>

試したこと

JSONにしてみる、.findを.filterにしてみる、イラストページではなくブックマークページ(https://www.pixiv.net/bookmark_detail.php?illust_id=~)のHTMLを取得してみるなど・・・
初心者のため試せることが少ないです・・・

補足情報(FW/ツールのバージョンなど)

改造元はこちらになります。
https://greasyfork.org/ja/scripts/392352-pixiv-%E8%A7%A3%E5%83%8F%E5%BA%A6%E8%BF%BD%E5%8A%A0

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

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

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

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

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

miyabi_takatsuk

2019/12/16 01:34 編集

まず、コールバックの引数である、BMhtmlが取得できているかどうか、コンソールなどで確認していくとよいかと。 Greasemonkeyがどのようなものかは、まだ調査中で存じ上げませんが、 場合によっては、セキュリティエラーでそもそも取得ができない可能性があります。 Greasemonkeyと、そのURLのプラグインは、わりとごく最近のもののようですが、 ブラウザ自体のセキュリティ強化は、最近特にかなり速いスピードで強化されていますので、先月できた裏技術も、もう使えなくなっているという可能性があります。 なので、そのURLの取得、HTMLの取得など自体ができているかどうか、エラーが起きていないかどうかを、まずコンソールなどでご確認ください。 つまり、質問を修正してほしいのは、コンソールでの出力結果と、エラーが出ている場合、そのエラーを記載してほしいです。
退会済みユーザー

退会済みユーザー

2019/12/16 19:07

ご教示いただきありがとうございます。 提示する情報もいまいちわからない素人で申し訳ないです・・・ 質問の追記をさせていただきました。 ご確認いただけますと幸いです。
guest

回答1

0

ベストアンサー

別のスクリプトを参考に、$.ajaxのdataTypeを'HTML'から'text'にし、.matchで検索すると、ブクマ数を取得できました。

投稿2019/12/19 13:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問