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

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

詳細はこちら
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

7982閲覧

pixivでURLを指定し、画像を保存しようとした所、ダウンロードエラー

hermit19901127

総合スコア368

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2019/10/11 15:24

編集2019/10/11 15:30

お世話になります。

現在、ChormeAPI及びJavaScriptを用いた、GoogleChorme向けのプラグイン開発を行っております。

(※1)
現在、Pixivの検索画面一覧のサムネイルを右クリックし、処理を実行すると
原寸大の画像のURLに対しアクセスを行い、その画像を保存するプラグインを作成しています。
(上記の「サムネイルから」は一旦忘れて頂いて大丈夫です。
https://www.pixiv.net/artworks/{作品ID}から、右クリックで指定対象のURLを指定し保存を試みています)

私の行った手順は以下です。
(1)jQueryを用いて、ajaxで指定のリンク先のHTMLソースを取得できるようにする
(2)https://www.pixiv.net/artworks/{作品ID}へとアクセスする
(3)そこで表示された画像が示すハイパーリンク先のURLを取得し、それを画像として保存する

すると、以下のような結果になりました。

1.取得できたURLは「https://i.pximg.net/img-original/img/2014/09/02/02/59/57/作品ID}_p0.jpg
(directoryが細かく区切られてますが、おそらく投稿日時等をフォルダで分けてると思われます)
2.そこにURL直打ちでアクセスすると「403 Forbidden」が発生しアクセスができない。
3.chrome.downloads.downloadで指定しても、ダウンロードが失敗する
(pixivを経由せず、直で画像のURLを指定しても失敗します)

なお、似たような処理をニコニコ静画さんに対して行った所、
こちらは、問題なく、こちらが求める機能が実装できました。

そもそも、Pixiv自体が、アカウントに鍵を掛ける機能があるため、画像の直リンクでアクセスできると問題がありそうなのは察しています。
(※1)の下部4行の達成が目的なので、「chrome.downloads.download」を用いたやり方以外にも別の手段等があれば、アイデア等頂けると幸甚に存じます。

※)
ソースコード等の情報が必要であれば、提供いたします

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

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

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

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

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

miyabi_takatsuk

2019/10/13 06:55 編集

なるほど・・・。 二点ほど、 ・ニコニコ動画で成功したのは、画像ですか?動画ですか? そしていつの話ですか? (近年セキュリティ強化がネット全体で行われているので、少し前できたことが、今はできなくなってる) ・その質問者さんが書いたコードは掲示できますか? できないのであれば、おおよそのその原因と、そもそも可能かどうかだけ、回答いたします。
hermit19901127

2019/10/16 16:00

私生活が立て込んでまして返信が遅れました… 1点目:ニコニコ動画というより、ニコニコ静画です。  こちらは、2019/11/11より成功してるので、最近です(2019/1017)(2点目で成功しているソースコードを添付いたします) 2点目:fileが7点(特にjQuery)があるので、zipのアップロードサイト(gigafileさん)にまとめました。7日ほどアクセスできると思います(過ぎた場合で欲しければご一報を) 1.https://21.gigafile.nu/1024-4bc0759c4fe3f13a83318dad82e45a67 接続後、画面中のボタンから「個別ダウンロード」を押し、好きなローカルへダウンロード 2.ダウンロードしたファイルを解凍 3.GoogleChormeを開く 4.GoogleChorme右上の右上の…をクリックし「設定」をクリック 5.画面左にある「拡張機能」をクリック 6.画面上の「パッケージ化されてない拡張機能を読み込む」をクリック 7.手順(2)で解答したフォルダを指定 これで、ニコニコ静画で検索したサムネイルの上で右クリックして「クリックで保存」を選べば、保存が可能です。 おおよその原因:Pixiv自体が「鍵アカウント」と言って、ユーザーのページの閲覧権があるので、ロックが掛かってるアカウントが投稿した絵に対しURLでアクセスできないようにしている(実際、nginxの表示と共に403(番号に自信がありません)エラーが出る) 可能かどうか:URLに対してダウンロード行為ができると、Pixivの鍵アカウントのユーザーの画像に対し、保存行為ができてしまうので、現状の自分のやり方及び、自分がzipで上げたソースではほぼ不能というのが個人的な判断だと思います。 今後として、画像URLに対して直接アクセス保存ではなく、 バックグラウンド上で正規に読み取ったデータに対して保存行為を行うような アクションが望ましいのかなと思うのですが、現状、そのような案が思いつかなく、この件は一旦保留にしようかなと思っている次第です。
miyabi_takatsuk

2019/10/16 22:15 編集

Zipではなく、質問本文に記載してください。 なので、掲示できるかどうかを聞いたのです。 (文字数制限があるため) 質問本文は修正できますので。 また、ソースコードを掲載するときは、<code>ボタンからコードブロックを入れ、その中に記載してください。 ``` この間にソースコード ``` のような形式です。
guest

回答2

0

pixivは少なくともリファラでアクセスに制限を掛けています。
chrome.downloads.downloadは調べたところリファラを送信できないということなので、少なくともこの方法では無理そうです。

投稿2019/10/19 15:54

ikadzuchi

総合スコア3047

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

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

0

ベストアンサー

zipの中身をみさせていただいたので、原因を回答させていただきます。
403エラー、で間違い無いのであれば、
アクセス権限がない時に出るエラーなので、質問者さんの見解でほぼ間違い無いでしょう。
スクリプトコード内で、Ajaxによる直接アクセスには、クロスドメインだった場合に、
CORSエラーがおきます。
ニコニコ静画で成功したのは、おそらく、ニコニコ静画が同様のアクセスを許可しているのかと思われます。pixivでは、質問者さんが考えている通りかと。
AWSのS3もセキュリティを通した方の画像は、URLにトークンなどを付与しないと、閲覧できない仕様なので、pixivにおいても同様の措置がとられているのかと思われます。

対策としては、pixivにアクセス許可をもらうしかないのですが、
そのようなことはできないと思うので、
pixivから、本質問の要件を満たせるなにかAPIが提供されていないかどうか、という角度で調査されてはいかがでしょうか?
なんとなくですが、なにかしらのAPIが用意されているのではないかと思います。
要件を一つのAPIで全て達成するというよりは、いくつかのAPIを複合させて使用することで、達成できる要件のような気がします。

投稿2019/10/16 22:34

miyabi_takatsuk

総合スコア9555

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

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

hermit19901127

2019/10/17 17:14

ですね…アクセス権が掛けられてるのと、鍵垢のアカウントの絵すら見れかねない方法は色々とよくない気がするので、別の手法を考えます。 自分なりに考えたのは、バックグラウンドで求める画像が掲載されたページを開いた上で、そこに対し、正規の保存手順をマクロのような仕組みで組めないかな、と思った次第です (「ユーザーが通常アクセスで画像保存に至るまでのページに行く→指定の画像を右クリック→指定の画像に保存」を自動化する形で) pixivが提供しているAPI…ちょっと聞いた事ないですが、過去にtwitterのAPIを使い、情報ツールを作った経験があるのでpixivがAPIを提供している可能性等含めて、いったん1から多角的に可能性を探してみようと思います! それと、ちょっとコード量が多く感じたので、zipで纏めてやったのですが、今後はなるべく重要な部分だけ抽出してなるべくコード記述に収めて質問そのものが長くならない形で質問しようかと思います。 ありがとうございます!
miyabi_takatsuk

2019/10/18 02:17

逆に解決に至るような回答にならず、すみません 汗 近年特に、クロスドメインのセキュリティは、ブラウザサイドでも強くなってるので、今回のような事をやりたくてもやれない時代だと痛感しております 汗 (一昔前は、iframeの読み込み元のDOMコントロールさえ可能だった) どうか頑張ってください。 もし、別角度で要件達成できたら、 自己解決を記載いただければ幸いです。 非常に興味ある内容なのでw
hermit19901127

2019/10/21 12:38

問題そのものが解決できてるわけではないので、 ベストアンサー、お二人のどちらにしようか悩みましたが、 ZIPで提出するなというご指摘をしながらも、ZIPを見て意見を頂き、 API等、別の方面からの検討という意見も頂いた、こちらをベストアンサーとさせて頂きます。 Teratailは「困ってる事に関する質問の場所」であり、知見を書き綴る所ではないので 問題が解決できたら、自分のブログか、Quitaあたりに記述してみようかなと思います。
miyabi_takatsuk

2019/10/21 13:48

BA、大変にありがとうございます! 様々、壁がいくつかありそうな要件ですが、達成できるよう健闘を祈っております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問