前提
多少プログラムの知識があるものの、そこまで詳しくないのでトンチキなことを行っている可能性があります。
ご助言頂けますと幸いです。
実現したいこと
GASを使用して、FANZA(DMM)のGAMEランキングを定時取得し、
パースしてランキングをスプレッドシートに記録していきたい。
※Parserライブラリを使用。
対象は下記2URL
FANZA(R18) https://games.dmm.co.jp/list/pc?sort=popular
DMM(一般) https://games.dmm.com/list/pc?sort=popular
DMMのランキングはすでに取得できており、
スプレッドシートへの書き込み、定時実行は確認済み。
下記でPHPで同じようなことをしており、それを参考にFANZA版の方も組んでいたがうまくいかず。。。
https://xn--f6q12aj29i.com/adult-affiliate/fanza-scraping-agecheck/#toc1
Cookie中のage_check_doneという変数に1が立っていれば大丈夫っぽいのですが、
そもそもCookieの扱いがいまいちわからず頓挫しております。
発生している問題・エラーメッセージ
FANZA版の年齢認証を突破できない。
該当のソースコード
GoogleAppScript(GAS)
1 2// 毎日FANZAのランキングを取ってきてくれるスクリプト 3 4function rankGet(){ 5 /******************************FANZAのランキングを取得******************************/ 6 var fanza_url = 'https://games.dmm.co.jp/list/pc?sort=popular'; 7 8 // 年齢認証を突破用 9 var options = { 10 'http' : { 11 method : 'GET', 12 headers : { 13 'Cookie' : 'age_check_done=1"' 14 } 15 } 16 }; 17 18 //URLにアクセスしてHTMLを取得 19 var responseDMM = UrlFetchApp.fetch(fanza_url,options); 20 21 //URLにアクセスしてHTMLを取得 22 var responseTextFZ = responseDMM.getContentText(); 23 24 // htmlを受け取ってjsonをパースしてリストにして返す。 25 var dataListFZ = jsonParse(responseTextFZ); 26 27 // スプレッドシートに書き込み 0:FANZA 1:DMM 2:テスト 28 writeSp(dataListFZ,0); 29 30 /***DMMのランキングを取得***/ 31 //URLを指定 32 var dmm_url = 'https://games.dmm.com/list/pc?sort=popular'; 33 34 //URLにアクセスしてHTMLを取得 35 var responseDMM = UrlFetchApp.fetch(dmm_url); 36 37 //レスポンスを文字列として取得 38 var responseTextDMM = responseDMM.getContentText(); 39 //Parserを使ってjson部分抜き出し 40 jsonString = Parser.data(responseTextDMM).from('<script id="__NEXT_DATA__" type="application\/json">').to('</script>').build(); 41 42 // htmlを受け取ってjsonをパースしてリストにして返す。 43 var dataListDMM = jsonParse(jsonString); 44 45 // スプレッドシートに書き込み 0:FANZA 1:DMM 2:テスト 46 writeSp(dataListDMM,1); 47} 48 49 50/******************************関数群******************************/ 51// 受け渡したhtmlデータからjsonを抜き出してリスト化して戻す。 52function jsonParse(jsonString){ 53 //jsonをパース 54 var jsonData = JSON.parse(jsonString); 55 56 //取得したjsonのリスト部分を抜き出し 57 var rankList = jsonData.props.pageProps.__APOLLO_STATE__; 58 59 // 日付データ準備 60 var now = new Date(); 61 var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); 62 var date = Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy/MM/dd'); 63 64 //書き込み用データ準備 65 var dataList = [] 66 var count = 1; 67 68 //rankListの内容を出力 69 for (var i in rankList){ 70 // typeがGameのもののみ抜き出す。 71 if(rankList[i]['__typename'] === 'Game'){ 72 73 /* 取れるデータ 74 "Game:636533-social": { 75 "__typename": "Game", 76 "id": "636533-social", 77 "gameId": "636533", 78 "name": "ミストトレインガールズ〜霧の世界の車窓から〜 X", 79 "description": "少女たちと幻霧に挑むファンタジーRPG", 80 "thumbnail": "https://pics.dmm.co.jp/freegame/app/636533/200.gif", 81 "genre": "RPG", 82 "type": "BROWSER", 83 "newRelease": false, 84 "link": "https://games.dmm.co.jp/detail/MistTrainGirlsX/", 85 "idHash": "43fa4d51f4288617f2257ab68643bd589b987be1daad84a62909f57b39dc1b55", 86 "device": "PC" 87 }, 88 */ 89 90 // パースしたデータを格納 91 var res = [ 92 date, 93 count, 94 rankList[i]['gameId'], 95 rankList[i]['name'], 96 rankList[i]['genre'], 97 rankList[i]['type'], 98 rankList[i]['newRelease'] 99 ] 100 // ログ出力 101 Logger.log(res); 102 103 // 出力に連結 104 dataList.push(res) 105 106 // ランキングカウントを+1 107 count+=1; 108 } 109 } 110 // リザルトを戻す 111 return dataList; 112} 113 114// 配列をもらって、スプレッドシートに書き込む。 115function writeSp(dataList,sheet_no){ 116 //書き込みたいスプレッドシートのID 117 var id = "◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"; 118 // IDからスプレッドシートを取得 119 var spreadsheet = SpreadsheetApp.openById(id); 120 // 最初のシートを取得(今回はシート1) 121 var sheet = spreadsheet.getSheets()[sheet_no]; 122 123 // 書き込み範囲を作成 124 var startRow = sheet.getLastRow()+1; // 最終行を取得 125 var row = dataList.length; // データ数を取得 126 var col = dataList[0].length; // データ列数を取得 127 128 // 書き込み範囲を指定 129 var addRange = sheet.getRange(startRow, 1, row, col); 130 131 // 一括書き込み 132 addRange.setValues(dataList); 133 134 // 一括書き込みの参考 135 // https://tetsuooo.net/gas/1107/# 136} 137/******************************関数群******************************/

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。