public-func

获取参数方法

当前为 2023-04-18 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/463963/1177562/public-func.js

  1. // ==UserScript==
  2. // @name public-func
  3. // @version 6.0
  4. // @description 获取参数方法
  5. // @license All Rights Reserved
  6. // @grant GM_getResourceText
  7. // ==/UserScript==
  8. var version = "1.0.9";
  9. var $style = $('<style>' +
  10. '#control_container{margin: 20px 0; background:#e9e9e9;padding:20px 0;}' +
  11. 'p{margin:10px 0;}' +
  12. '#control_container button{width:80%;margin:10px 10%;padding:10px 0;font-size:30px;border-style: solid;}' +
  13. '#start_btn{color:green;}' +
  14. '#end_btn{color:red;}' +
  15. '.input_wrapper{display: flex;justify-content:center;font-size: 16px; margin-bottom:10px;}' +
  16. '.input_wrapper_phone{width: 70%;font-size: 25px;margin:20px 20px;padding:20px 20px; text-align:center;}' +
  17. '.notice{margin:10px 10px;padding:10px 10px;color:darkslategrey;border-style: solid; border-width: 1px; border-color:darkslategrey;}' +
  18. '#wx{text-align: center;}' +
  19. '#countdown_wrapper {display:none; font-size: 30px; text-align:center; background:#ffeaf1;}' +
  20. '#countdown_wrapper p{width:100%;}' +
  21. '#countdown {font-size: 50px; color:#ff1268;}' +
  22. '.warning {color:red; font-weight:400;}' +
  23. 'h3 {font-weight:800;}' +
  24. '</style>');
  25.  
  26. function syncTime(num) {
  27. GM_xmlhttpRequest({
  28. url: "https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
  29. method: 'GET',
  30. timeout: 10000,
  31. headers: {
  32. 'Content-Type': 'application/x-www-form-urlencoded'
  33. },
  34. onload: function (responseDetails) {
  35. if (responseDetails.status == 200) {
  36. var result = JSON.parse(responseDetails.responseText.replace('fff(', '').replace(')', ''));
  37.  
  38. window.current_time = result.data.t;
  39. var time_difference = Math.ceil((window.sellStartTime_timestamp - window.current_time) / 1000);
  40. console.log("相差秒数:" + time_difference);
  41. // 提前1秒开始
  42. if (time_difference < 2) {
  43. window.location.href = window.order_url;
  44. } else {
  45. var time_difference_str = time_difference.toHHMMSS();
  46. $("#countdown").text(time_difference_str);
  47.  
  48. window.timer = setTimeout(timedUpdate, num);
  49. }
  50. } else {
  51. setTimeout(() => {
  52. syncTime(500);
  53. }, 1000);
  54. }
  55. }
  56. });
  57. }
  58.  
  59. function check_alert() {
  60. var alerts = $(".next-dialog-alert");
  61. if (alerts.length > 0 || window.current_time >= window.max_time) {
  62. window.location.reload();
  63. } else {
  64. window.current_time = window.current_time + 300;
  65. setTimeout(check_alert, 300);
  66. }
  67. }
  68.  
  69. function fill_form() {
  70. var buyer_number = parseInt($(".ticket-buyer-title em").text());
  71. window.buyer_number = buyer_number;
  72. window.curr_buyer = 0;
  73. console.log("勾选下单人数:" + buyer_number);
  74. var buyer_list = $(".buyer-list-item input");
  75. for (var i = 0; i < buyer_number; i++) {
  76. console.log(buyer_list[i]);
  77. buyer_list[i].click();
  78. }
  79.  
  80. setTimeout(submit_order, 200);
  81. }
  82.  
  83. function submit_order() {
  84. $(".submit-wrapper button").click();
  85. setTimeout(check_alert, 200);
  86. }
  87.  
  88. function generate_seat_url(is_calendar, event, price, people_num, data_json) {
  89. var performBases = [];
  90. if (is_calendar) {
  91. var month = event.slice(0, 7);
  92. var calendarPerforms = data_json["calendarPerforms"];
  93.  
  94. for (var i = 0; i < calendarPerforms.length; i++) {
  95. var calendarPerform = calendarPerforms[i];
  96. if (calendarPerform["month"] == month) {
  97. performBases = calendarPerform["performBases"];
  98. }
  99. }
  100. } else {
  101. performBases = data_json["performBases"];
  102.  
  103. }
  104.  
  105. var itemId = "";
  106.  
  107. for (var i = 0; i < performBases.length; i++) {
  108. var performBase = performBases[i];
  109. var performs = performBase["performs"];
  110.  
  111.  
  112. for (var j = 0; j < performs.length; j++) {
  113. var perform = performs[j];
  114. var performId = perform.performId;
  115. var projectId = new URLSearchParams(window.location.href).get('id');
  116. if (perform["performName"] === event) {
  117. itemId = perform["itemId"];
  118. window.itemId = itemId;
  119. var skuList = perform["skuList"];
  120. for (var k = 0; k < skuList.length; k++) {
  121. var skuList_item = skuList[k];
  122. if (skuList_item["skuName"] === price) {
  123. var skuId = skuList_item["skuId"];
  124. return `https://seatsvc.damai.cn/tms/selectSeat?itemId=${itemId}&performId=${performId}&skuId=${skuId}&projectId=${projectId}`
  125.  
  126. }
  127. }
  128.  
  129. }
  130. }
  131.  
  132. }
  133. return null;
  134.  
  135. }
  136.  
  137. function detail_ui() {
  138. var $service = $(".content-right .service");
  139.  
  140. var $control_container = $("<div id='control_container'></div>");
  141.  
  142. var $wx = $(`<div id="wx" class="notice"><p>公众号【时光最惠站】 </p><p>版本: ${version}</p></div>`);
  143.  
  144. var $number_input = $('<div class="input_wrapper" id="number_input_wrapper">请输入人数:<input id="number_input" type="number" value="1" min="1" max="6"></div>');
  145. // var $email_input = $('<div class="input_wrapper" id="email_input_wrapper">email:<input id="email_input" type="email" value="example@hotmail.com"></div>');
  146. // var $name_input = $('<div class="input_wrapper" id="name_input_wrapper">联系人姓名:<input id="name_input" type="text" value="小明"></div>');
  147. // var $duration_input = $('<div class="input_wrapper" id="duration_input_wrapper">刷新间隔(ms):<input id="duration_input" type="text" value="5000"></div>');
  148.  
  149. var $start_btn = $('<button id="start_btn">开始抢票</button>');
  150. var $end_btn = $('<button id="end_btn">停止抢票</button>');
  151. var $notice = $('<div id="notice" class="notice"><h3>使用步骤</h3><p>1.登录,填写购票人信息</p><p>2.选择场次->价格->填写人数</p><p>3.点击‘开始抢票’</p></div>');
  152.  
  153. var $notice2 = $('<div id="notice2" class="notice"><p>已同步网络时间</p><p>若误差过大请刷新页面,更新时间</p></div>');
  154.  
  155. var $countdown = $('<div id="countdown_wrapper"><p id="selected_event">event1</p><p id="selected_price">price2</p><p id="selected_number">1人</p><br><p>倒计时:</p><p id="countdown">00:00:00</p></div>');
  156.  
  157. $control_container.append($style);
  158. $control_container.append($wx);
  159. $control_container.append($number_input);
  160. // $control_container.append($email_input);
  161. // $control_container.append($name_input);
  162. // $control_container.append($duration_input);
  163. $control_container.append($start_btn);
  164. $control_container.append($end_btn);
  165. $control_container.append($notice);
  166. $control_container.append($notice2);
  167. // $control_container.append($countdown);
  168.  
  169. $control_container.insertBefore($service);
  170. $countdown.insertBefore($control_container);
  171.  
  172. $("#start_btn").click(function () {
  173. var event = get_event();
  174. var price = get_price();
  175. var people_num = $("#number_input").val();
  176. var data_json = JSON.parse($("#dataDefault").text());
  177. window.sellStartTime_timestamp = data_json["sellStartTime"];
  178.  
  179. $("#selected_event").text(event);
  180. $("#selected_price").text(price);
  181. $("#selected_number").text(people_num + "人");
  182.  
  183. $("#countdown_wrapper").show();
  184.  
  185. // console.log(data_json)
  186.  
  187. var result = generate_confirm_url(event, price, people_num, data_json);
  188. console.log("result--" + result);
  189. if (result) {
  190. window.order_url = result;
  191. sessionStorage.setItem('order_url', result);
  192.  
  193. console.log("countdown and go to confirm page");
  194. timedUpdate();
  195. } else {
  196. alert("获取场次票价人数失败,请刷新再试");
  197.  
  198. }
  199.  
  200. });
  201.  
  202. $("#end_btn").click(function () {
  203. clearTimeout(window.timer);
  204. $("#countdown_wrapper").hide();
  205. sessionStorage.clear();
  206. });
  207.  
  208. }
  209.  
  210.  
  211. function generate_confirm_url(event, price, people_num, data_json) {
  212.  
  213. var performBases = data_json["performBases"];
  214. var itemId = "";
  215.  
  216. for (var i = 0; i < performBases.length; i++) {
  217. // console.log("1");
  218. var performBase = performBases[i];
  219. var performs = performBase["performs"];
  220. for (var j = 0; j < performs.length; j++) {
  221. // console.log("2");
  222. var perform = performs[j];
  223. if (perform["performName"] === event) {
  224. // console.log("3");
  225. itemId = perform["itemId"];
  226. window.itemId = itemId;
  227. var skuList = perform["skuList"];
  228. for (var k = 0; k < skuList.length; k++) {
  229. // console.log("4");
  230. var skuList_item = skuList[k];
  231. if (skuList_item["skuName"] === price) {
  232. // console.log("5");
  233. var skuId = skuList_item["skuId"];
  234. return `https://buy.damai.cn/orderConfirm?exParams=%7B%22damai%22%3A%221%22%2C%22channel%22%3A%22damai_app%22%2C%22umpChannel%22%3A%2210002%22%2C%22atomSplit%22%3A%221%22%2C%22serviceVersion%22%3A%221.8.5%22%7D&buyParam=${itemId}_${people_num}_${skuId}&buyNow=true&spm=a2oeg.project.projectinfo.dbuy`
  235. // https://buy.damai.cn/orderConfirm?exParams=%7B%22damai%22%3A%221%22%2C%22channel%22%3A%22damai_app%22%2C%22umpChannel%22%3A%2210002%22%2C%22atomSplit%22%3A%221%22%2C%22serviceVersion%22%3A%221.8.5%22%2C%22umidToken%22%3A%22T2gAPtWBhV9tC67Mptnj5AU_d_KX-57DqykfreYNo38zNk2TgBZssV-gxQlN7aEPYnPc6dXI1re5zNemlLZpfS71%22%2C%22ua%22%3A%22134%23pciI2XXwXGEkxcXNZXkwdJ0D3QROwKOlAOzBtZ26EXkEHKc8qKrQAAmvANaH6n1KGaF4vxWgMEiyvJ8h9bbkRf%2FYEV1hBueE%2BJdqKXL3ZtWwTq1qijRmNyd3OOH8qkuJ%2BJd8qcHAZXnw%2Bcy8qqK7GANE1XazXJmg%2FR%2F5Utf35L2Od6%2FG0dbS1b%2B9L5ktB6IWasdFdaIn%2BqpUTLB8ajSqUVD0dOgouDkm78TjZ0CoGokuqXVsf1xdZ9p%2Fut6sLnyD7zJR7vi3xgho3ZvGI37q7cXGmA1IjAYsrBXU2kdbCbTZygJjLhS6%2FKJ7jMrS32iAng488JzvSMYV4D5o9mt%2BYWWddusAWqInij0%2FLKPSEnpK8MgQLbC8xXqcqv9ojtBm2DseaKe6g0CAXgFjW0XXA1aAhvJVTXDVIjariuT47UsZ94G4Vve%2Byr6FmI1RmtHBHwiiTN4YufCiYcr7UMN40vCkITwrXibXJVe5IW%2BkcuFlRVaK5fToG%2BK%2FDDJNLfO7LA4OoXB5BemruIehBXZPAVBHW5VgnKKG6A7MKWG8VHBsknL77EDMTYo%2FVGR5E9KfJtMNhTuRyPEJUXqIyuBs%2BWMeerkEllrcI4tn6j%2FQvxFo%2BMmoAnu4Gz05k2yBrt45eVj3sndkBqzjSOdocl5f%2BtA18aToWalQuZqLb0x31S4Ac6ZTPkhnqSnt%2BGGodrhKgkR1IyvyfYR85d2Yxnht1kSmE7O4YIEt6srmH2We9UqUdhkkeKByPHsj4MvAe2yejlSN1HcH0Mm0K4JjF59IvjH4Aw3UKv7GGnY1EtOcPvgZ8uNf7HfoWX%3D%3D%22%7D&buyParam=624490600818_1_4598946947036&buyNow=true&spm=a2oeg.project.projectinfo.dbuy
  236. }
  237. }
  238.  
  239. }
  240. }
  241.  
  242. }
  243. return null;
  244.  
  245. }
  246.  
  247. function phone_detail_ui() {
  248. var $service = $(".banner");
  249. if ($service == null || $service.length == 0) {
  250. $service = $(".auto-banner");
  251. }
  252. if ($service == null || $service.length == 0) {
  253. $service = $("#detail");
  254. }
  255. if ($service == null || $service.length == 0) {
  256. setTimeout(phone_detail_ui, 200);
  257. return;
  258. }
  259.  
  260. var $control_container = $("<div id='control_container'></div>");
  261. var $wx = $(`<div id="wx" class="notice"><p>公众号【时光最惠站】 </p><p>版本: ${version}</p></div>`);
  262. var $eventId = $('<div class="input_wrapper_phone" id="event_input_wrapper">输入票价对应的序号:<input id="event_input" type="text" value="0" ></div>');
  263. var $number_input = $('<div class="input_wrapper_phone" id="number_input_wrapper">选择人数:<input id="number_input" type="number" value="2" min="1" max="4"></div>');
  264. var $start_btn = $('<button id="start_btn">开始抢票</button>');
  265. var $end_btn = $('<button id="end_btn">停止</button>');
  266. var $notice = $('<div id="notice" class="notice"><h3>使用步骤</h3><p>1.提前登录-填写购票人,收货地址</p><p>2.请先点击右下角[即将开抢 预选场次]或[立即购买] 按钮,再按提示输入票价前的序号</p><p>3.点击‘开始抢票’</p></div>');
  267.  
  268. var $notice2 = $('<div id="notice2" class="notice"><p>注:默认勾选2个观演人(可修改)</p></div>');
  269. var $countdown = $('<div id="countdown_wrapper"><p id="selected_event">场次</p><p id="selected_price">自动勾选人数</p><p id="selected_number">2人</p><br><p>倒计时:</p><p id="countdown">00:00:00</p></div>');
  270.  
  271. $control_container.append($style);
  272. $control_container.append($wx);
  273. $control_container.append($eventId);
  274. $control_container.append($number_input);
  275. $control_container.append($start_btn);
  276. //btn开始
  277. var $datetime_input = $(`<div id="datetime_input_div" style="display:flex; align-items:center;margin:25px 10%;"> <span style="width: 30%;font-size: 30px;">捡漏日期</span>
  278. <input id="datetime_input" type="number" value="0" min="0" max="4" style="width: 15%;"><button id="jianloubtn" style="color: green;width: 55%;">开始捡漏</button></div>`);
  279.  
  280. $control_container.append($datetime_input);
  281.  
  282.  
  283. $control_container.append($end_btn);
  284. $control_container.append($notice);
  285. $control_container.append($notice2);
  286.  
  287. $control_container.insertBefore($service);
  288. $countdown.insertBefore($control_container);
  289.  
  290. $("#start_btn").click(function () {
  291. var eventJson = $("#event_input").val();
  292. if (eventJson == "" || eventJson == null) {
  293. alert("请先输入票价对应的序号");
  294. return;
  295. }
  296.  
  297. var skuIds = sessionStorage.getItem('skuIds');
  298. var itemIds = sessionStorage.getItem('itemIds');
  299. if (skuIds == null || itemIds == null || skuIds.length == 0 || itemIds.length == 0) {
  300. alert("请先点击右下角[即将开抢 预选场次]或[立即购买] 按钮获取票档,再按提示输入票价前的序号");
  301. return;
  302. }
  303. skuIds = skuIds.split(",");
  304. itemIds = itemIds.split(",");
  305. if (skuIds.length <= Number(eventJson)) {
  306. alert("序号错误,无该序号对应场次");
  307. return;
  308. }
  309. var price = skuIds[eventJson];
  310. var eventid = itemIds[eventJson];
  311. //获取场次id+价格id
  312. console.log("item_id:" + eventid);
  313. console.log("price_id:" + price);
  314.  
  315. var people_num = $("#number_input").val();
  316. var result = phone_confirm_url(eventid, price, people_num);
  317. window.phone_order_url = result;
  318. window.phone_people_num = people_num;
  319. sessionStorage.setItem('phone_order_url', result);
  320. sessionStorage.setItem('phone_people_num', people_num);
  321. sessionStorage.setItem('reload_cnt', 0);
  322.  
  323. //已经开抢了,立即购买
  324. var cdate = $('.count-down-date');
  325. var sellStartTime = "";
  326. if (cdate == null || cdate.length == 0) {
  327. sellStartTime = new Date().getTime();//开始时间时间戳
  328. } else {
  329. cdate = cdate.innerText == null ? cdate[0].innerText : cdate.innerText;
  330. var startTime = cdate.replace('月', '-').replace('日', '').replace('开抢', '') + ":00";
  331. startTime = new Date().getFullYear() + "-" + startTime;
  332. if (navigator.userAgent.indexOf("Safari") != -1) {
  333. startTime = startTime.replace(/-/g, '/');
  334. }
  335. sellStartTime = new Date(startTime).getTime();//开始时间时间戳
  336. }
  337. window.sellStartTime_timestamp = sellStartTime;
  338. $("#selected_event").text(startTime);
  339. // $("#selected_price").text(price);
  340. $("#selected_number").text(people_num + "人");
  341.  
  342. $("#countdown_wrapper").show();
  343.  
  344. timedUpdate_phone();
  345. });
  346. $("#end_btn").click(function () {
  347. clearTimeout(window.timer);
  348. $("#countdown_wrapper").hide();
  349. sessionStorage.clear();
  350. });
  351.  
  352. $("#jianloubtn").click(jianloubtn_click);
  353. }
  354.  
  355. function jianloubtn_click(){
  356. var people_num = $("#number_input").val();
  357. var datetime_num = $("#datetime_input").val();
  358. var eventJson = $("#event_input").val();
  359. sessionStorage.setItem('datetime_num_jl', datetime_num);
  360. sessionStorage.setItem('phone_people_num', people_num);
  361. sessionStorage.setItem('eventJson_num', eventJson);
  362. sessionStorage.setItem('if_janlou', "YES");//开始捡漏
  363. $(".buy__button").click();
  364. }
  365.  
  366. function phone_confirm_url(event, price_id, people_num) {
  367. return `https://m.damai.cn/app/dmfe/h5-ultron-buy/index.html?buyParam=${event}_${people_num}_${price_id}&buyNow=true&exParams=%257B%2522channel%2522%253A%2522damai_app%2522%252C%2522damai%2522%253A%25221%2522%252C%2522umpChannel%2522%253A%2522100031004%2522%252C%2522subChannel%2522%253A%2522damai%2540damaih5_h5%2522%252C%2522atomSplit%2522%253A1%257D&spm=a2o71.project.0.i0&sqm=dianying.h5.unknown.value`
  368. }
  369.  
  370. function check_phone_alert() {
  371. var isStopped = sessionStorage.getItem("isStopped");
  372. if (isStopped != null && "stop" == isStopped) { // 判断标记变量,如果为 true 则停止执行
  373. return;
  374. }
  375.  
  376. var checkblack = $(".baxia-dialog-content");
  377. if (checkblack != null && checkblack.length > 0) {
  378. var reload_cnt = sessionStorage.getItem('reload_cnt');
  379. if (reload_cnt == null) {
  380. reload_cnt = 0;
  381. }
  382. sessionStorage.setItem('reload_cnt', Number(reload_cnt) + 1);
  383. window.location.reload();
  384. }
  385.  
  386. var mian = $("#app >div >div");
  387. if (mian != null) {
  388. if (mian.innerHTML != null) {
  389. if (mian.innerHTML.indexOf("系统繁忙") != -1) {
  390. window.location.reload();
  391. } else {
  392. window.current_time = window.current_time + 300;
  393. setTimeout(submit_phone_order, 400);
  394. }
  395. } else if (mian.length == 2) {
  396. if (mian[0].innerHTML == '接口超时') {
  397. console.log("接口超时...");
  398. }
  399. if (mian[1] != null) {
  400. if (mian[1].innerHTML == '刷新') {
  401. mian[1].click();
  402. } else {
  403. setTimeout(submit_phone_order, 300);
  404. }
  405. }
  406. } else if (mian.length > 2) {
  407. setTimeout(submit_phone_order, 300);
  408. } else {
  409. console.log("未知...");
  410. }
  411.  
  412. }
  413. //设置1分钟后停止刷新
  414. setTimeout(() => {
  415. clearTimeout(window.timer);
  416. sessionStorage.clear();
  417. }, 20000);
  418. }
  419.