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

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

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

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

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

Q&A

解決済

1回答

878閲覧

Ajaxを使ってOGPのog:imageをパースする方法(ASPクラシック)

tziiu

総合スコア13

jQuery

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

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

0グッド

1クリップ

投稿2017/07/31 07:33

度々申し訳ございません。。。
URLからog:imageをパースしたく、いろいろと模索しております。
過去2回質問をさせていただいたのですが、私の質問の方法が悪く回答を得れなかったので、独力で進めています。。。
サーバーサイドでの実装は以下のように力業でできるようになったのですが、ソースコードをいちいち見に行くのでものすごく重いです。

strURL = "" strURL = Rec("ShopURL") IF strURL <> "" Then 'ServerXMLHTTPでサーバー間で HTTP アクセスを行う準備をする***************************** Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP") objXML.setOption 2, 13056 objXML.open "POST", strURL, False objXML.send '対象のURLからWeb情報を取得する(文字列型) BaseText = objXML.responseText '************************************************************************************** 'そのURLのWebページがあるかどうかを確認する intRet = objXML.status '404が戻ってきたらそのサイトは実在しないので終了 IF intRet <> 404 Then SearchPoint = 1'1文字目から参照する 'og:imageの前の部分をちょん切る FirstCutPoint = InStr(SearchPoint, BaseText, "og:image") If FirstCutPoint <> 0 Then 'og:imageがあるかどうか '次に切り取る位置を探す(jpgもしくはpngを探す) 'OGPは基本的にこの2つの拡張子のどちらかなのでその2つに最適化する nJPG = InStr(FirstCutPoint, BaseText, ".jpg") nPNG = InStr(FirstCutPoint, BaseText, ".png") 'どちらか先に見つかったほうで切って、拡張子を付け直す 'さらにhttpより前の文字数と拡張子より前の文字数を取得する 'Mid関数でその間を抜き出し、改めて拡張子を付け直す If nJPG > nPNG And nPNG <> 0 Then ChoiceTag = nPNG MidURL = Mid(BaseText, FirstCutPoint, (ChoiceTag - FirstCutPoint)) MidURL = MidURL & ".png" SecondCutPoint = InStr(SearchPoint, MidURL, "http") nPNG = InStr(SecondCutPoint, MidURL, ".png") ChoiceTag = nPNG ResultURL = Mid(MidURL, SecondCutPoint, (ChoiceTag - SecondCutPoint)) ResultURL = ResultURL & ".png" Else ChoiceTag = nJPG MidURL = Mid(BaseText, FirstCutPoint, (ChoiceTag - FirstCutPoint)) MidURL = MidURL & ".jpg" SecondCutPoint = InStr(SearchPoint, MidURL, "http") nJPG = InStr(SecondCutPoint, MidURL, ".jpg") ChoiceTag = nJPG ResultURL = Mid(MidURL, SecondCutPoint, (ChoiceTag - SecondCutPoint)) ResultURL = ResultURL & ".jpg" End IF '↓ブランクで開かないとセキュリティに引っかかるから注意! ImageOUTPUT = "<a href ='" & Rec("ShopURL") & "' target='_blank'><img src='" & ResultURL & "'></a>" Else 'ここにはogタグがなかった場合の処理を記載する End If Else 'ここにはURLが存在しなかった場合の処理を記載する End IF Else 'ここにはURLがブランクだった場合の処理を記載する End IF Response.Write (ImageOUTPUT)

そのため、Ajaxを使い、非同期で画像を出すことで体感速度を上げることができればと思って進めています。
以下のように記載をしているのですが、「ハンドルされない例外が発生しました」というエラーが表示されてしまいます。
どう修正すればいいのか、どなたかご教示いただけませんでしょうか??

<script TYPE="text/javascript"> /*店舗URLから店舗画像を取得するためのURL*/ $(function(){ var urlcount = document.getElementById('URLCount').value; for (var i = 1; i <= urlcount; i++){ var ScrapingShopURL = document.getElementById('ScrapingShopURL_' + i).href; $.ajax({ type: "POST", url: "GetImageURL.asp", data: { ScrapingShopURL: ScrapingShopURL }, datatype: "json" }).done(function (data) { $('#ResultImage_' + i).attr('src', ResultURL); }).fail(function () { alert('error!!!'); }); } }); </script>
ScrapingShopURL = Request.Form("ScrapingShopURL") 'ServerXMLHTTPでサーバー間で HTTP アクセスを行う準備をする***************************** Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP") objXML.setOption 2, 13056 objXML.open "POST", ScrapingShopURL, False objXML.send '対象のURLからWeb情報を取得する(文字列型) BaseText = objXML.responseText '************************************************************************************** 'そのURLのWebページがあるかどうかを確認する intRet = objXML.status '404が戻ってきたらそのサイトは実在しないので終了 IF intRet <> 404 Then SearchPoint = 1'1文字目から参照する 'og:imageの前の部分をちょん切る FirstCutPoint = InStr(SearchPoint, BaseText, "og:image") 'og:imageがあるかどうか If FirstCutPoint <> 0 Then '次に切り取る位置を探す(jpgもしくはpngを探す) 'OGPは基本的にこの2つの拡張子のどちらかなのでその2つに最適化する nJPG = InStr(FirstCutPoint, BaseText, ".jpg") nPNG = InStr(FirstCutPoint, BaseText, ".png") 'どちらか先に見つかったほうで切って、拡張子を付け直す 'さらにhttpより前の文字数と拡張子より前の文字数を取得する 'Mid関数でその間を抜き出し、改めて拡張子を付け直す If nJPG > nPNG And nPNG <> 0 Then ChoiceTag = nPNG MidURL = Mid(BaseText, FirstCutPoint, (ChoiceTag - FirstCutPoint)) MidURL = MidURL & ".png" SecondCutPoint = InStr(SearchPoint, MidURL, "http") nPNG = InStr(SecondCutPoint, MidURL, ".png") ChoiceTag = nPNG ResultURL = Mid(MidURL, SecondCutPoint, (ChoiceTag - SecondCutPoint)) ResultURL = ResultURL & ".png" Else ChoiceTag = nJPG MidURL = Mid(BaseText, FirstCutPoint, (ChoiceTag - FirstCutPoint)) MidURL = MidURL & ".jpg" SecondCutPoint = InStr(SearchPoint, MidURL, "http") nJPG = InStr(SecondCutPoint, MidURL, ".jpg") ChoiceTag = nJPG ResultURL = Mid(MidURL, SecondCutPoint, (ChoiceTag - SecondCutPoint)) ResultURL = ResultURL & ".jpg" End IF Else ResultURL = "" End If Else ResultURL = "" End IF BackData = "{""ResultURL"":" & ResultURL & "}" Response.Write(BackData)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Ajaxだけでよいのであれば、urlに対してdataType: htmlでajaxを飛ばすのはダメでしょうか?

そうすると該当ページのソースコードが返ってくるので、そちらから正規表現で抜き出すなど:。。。

仮にこのページのogpを取得するとすると以下のような感じです。
正規表現はちょっと工夫しなくてはならないかもしれませんが!

js

1 2var url = "https://teratail.com/questions/86429" 3 4$.ajax({ 5 url: url, 6 dataType: 'html' 7}).then( 8 (res) => { 9 m = res.match(/\<meta\sproperty\=\"og\:image\"\scontent\=\"(.+?)"\/\>/) 10 console.log(m) 11 if(m){ 12 console.log(m[1]) 13 }else{ 14 console.log('og:imageは取得できませんでした') 15 } 16 }, 17 (res) => { 18 console.log('error') 19 console.log(res) 20 } 21)

投稿2017/07/31 08:11

MasakazuFukami

総合スコア1869

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

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

tziiu

2017/07/31 11:21

ありがとうございます! 回答をいただけて嬉しいです!! いただいたヒントを組み合わせて何とか実装できそうです!! 今後とも宜しくお願い致します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問