Parcourir la source

[edit] dotask iframe api

wenliming il y a 2 ans
Parent
commit
b19e0a1308

+ 3 - 2
src/denet/content/doTask.js

@@ -45,7 +45,7 @@ const doTask = {
             })
         })
     },
-    follows({ follows }, overTime) {
+    follows({ follow_name, twitterUserId }, overTime) {
         return new Promise((res, rej) => {
             messageCenter.send({
                 info: {
@@ -53,7 +53,8 @@ const doTask = {
                     iframeId //用于告诉父窗口会传消息给哪个iframe
                 },
                 data: {
-                    follows
+                  follow_name,
+                  twitterUserId
                 },
                 overTime,
                 callback: (data) => {

+ 29 - 0
src/denet/content/getData.js

@@ -0,0 +1,29 @@
+import MESSAGE_ENUM from '@/uilts/messageCenter/iframe/messageEnum'
+import messageCenter from '@/uilts/messageCenter/iframe'
+import { getQueryString } from '@/uilts/help'
+const iframeId = getQueryString('iframeId')
+
+const getData = {
+  getUserInfoByName({screen_name}, overTime) {
+    return new Promise((res, rej) => {
+      messageCenter.send({
+          info: {
+              actionType: MESSAGE_ENUM.IFRAME_GET_TWITTER_USER_INFO,
+              iframeId
+          },
+          data: {
+            screen_name
+          },
+          overTime,
+          callback: (data) => {
+              res(data);
+          },
+          failback: (e) => {
+              rej(e)
+          }
+      })
+    })
+  }
+}
+
+export default getData

+ 4 - 2
src/denet/content/index.js

@@ -1,7 +1,9 @@
 import doTask from '@/denet/content/doTask'
 import dom from '@/denet/content/dom'
+import getData from '@/denet/content/getData'
 
 export default {
     doTask,
-    dom
-}
+    dom,
+    getData
+}

+ 7 - 1
src/entry/content.js

@@ -61,8 +61,8 @@ import {
 } from "@/logic/content/denet.js";
 
 import doTask from '@/logic/content/help/doTask'
+import getData from '@/logic/content/help/getData'
 import chromeMessageCenter from '@/uilts/messageCenter/chrome';
-import { re } from "mathjs";
 
 chrome.storage.onChanged.addListener(changes => {
     initExecuteScript(changes)
@@ -159,6 +159,12 @@ const newOnMessageMethod = (res) => {
         case 'IFRAME_DO_TASK_RETWEET':
             doTask.TwitterRetweetAPI({ info, data })
             break
+        case 'IFRAME_DO_TASK_FOLLOWS':
+            doTask.TwitterFollowAPI({ info, data })
+            break
+        case 'IFRAME_GET_TWITTER_USER_INFO':
+            getData.TwitterApiGetUserInfoByName({ info, data })
+            break
     }
 }
 

+ 4 - 2
src/logic/content/ParseCard.js

@@ -306,14 +306,16 @@ class ParseCard {
         return _iframe
     }
     createIframe({ post_Id = '', tweet_Id = '', tweet_author = '', page_type = '' }, if_center = false) {
+        let _iframeId = `denet-${guid()}`
         let _iframe = document.createElement('iframe')
         let _iframe_url = ''
         let tweet_str = ''
         if (tweet_Id) {
             tweet_str = `&tweetId=${tweet_Id}`
         }
-        _iframe.id = post_Id
-        _iframe_url = chromeExtensionUrl + ('iframe/red-packet.html') + `?postId=${post_Id}${tweet_str}&tweet_author=${tweet_author}&window_origin=${window.location.origin}&page_type=${page_type}`;
+        _iframe.id = _iframeId
+        _iframe.dataset.card = 'denet'
+        _iframe_url = chromeExtensionUrl + ('iframe/red-packet.html') + `?postId=${post_Id}${tweet_str}&tweet_author=${tweet_author}&window_origin=${window.location.origin}&page_type=${page_type}&iframeId=${_iframeId}`;
         // debugger mode
         if (window.location.href.includes('denet_debugger')) {
             _iframe_url = _iframe_url + '&denet_debugger=1'

+ 29 - 29
src/logic/content/help/doTask.js

@@ -1,6 +1,6 @@
 import messageCenter from '@/uilts/messageCenter/content';
 import { getCookie } from '@/uilts/help'
-
+import axios from 'axios';
 
 const TwitterApiCreateTweet = ({ info, data }) => {
     let params = {
@@ -86,32 +86,31 @@ const TwitterLikeAPI = ({ info, data }) => {
     })
 }
 
-// const TwitterFollowAPI = ({ info, data }) => {
-//     // 
-//     fetch("https://twitter.com/i/api/1.1/friendships/create.json", {
-//         "headers": {
-//             "authorization": "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA",
-//             "content-type": "application/x-www-form-urlencoded",
-//             "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\", \"Google Chrome\";v=\"102\"",
-//             "sec-ch-ua-mobile": "?0",
-//             "sec-ch-ua-platform": "\"macOS\"",
-//             "x-csrf-token": getCookie('ct0'),
-//             "x-twitter-active-user": "yes",
-//             "x-twitter-auth-type": "OAuth2Session",
-//             "x-twitter-client-language": "zh-cn"
-//         },
-//         "referrer": "https://twitter.com/home",
-//         "referrerPolicy": "strict-origin-when-cross-origin",
-//         "body": "include_profile_interstitial_type=1&include_blocking=1&include_blocked_by=1&include_followed_by=1&include_want_retweets=1&include_mute_edge=1&include_can_dm=1&include_can_media_tag=1&include_ext_has_nft_avatar=1&skip_status=1&user_id=" + data.follow_name + "",
-//         "method": "POST",
-//         "mode": "cors",
-//         "credentials": "include"
-//     }).then(() => {
-//         messageCenter.send({ info, data: { task_done: true, follow_name: data.follow_name } })
-//     }).catch(() => {
-//         messageCenter.send({ info, data: { task_done: false, follow_name: data.follow_name } })
-//     })
-// }
+const TwitterFollowAPI = ({ info, data }) => {
+    fetch("https://twitter.com/i/api/1.1/friendships/create.json", {
+        "headers": {
+            "authorization": "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA",
+            "content-type": "application/x-www-form-urlencoded",
+            "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\", \"Google Chrome\";v=\"102\"",
+            "sec-ch-ua-mobile": "?0",
+            "sec-ch-ua-platform": "\"macOS\"",
+            "x-csrf-token": getCookie('ct0'),
+            "x-twitter-active-user": "yes",
+            "x-twitter-auth-type": "OAuth2Session",
+            "x-twitter-client-language": "zh-cn"
+        },
+        "referrer": "https://twitter.com/home",
+        "referrerPolicy": "strict-origin-when-cross-origin",
+        "body": "include_profile_interstitial_type=1&include_blocking=1&include_blocked_by=1&include_followed_by=1&include_want_retweets=1&include_mute_edge=1&include_can_dm=1&include_can_media_tag=1&include_ext_has_nft_avatar=1&skip_status=1&user_id=" + data.twitterUserId + "",
+        "method": "POST",
+        "mode": "cors",
+        "credentials": "include"
+    }).then(() => {
+        messageCenter.send({ info, data: { task_done: true, follow_name: data.follow_name } })
+    }).catch(() => {
+        messageCenter.send({ info, data: { task_done: false, follow_name: data.follow_name } })
+    })
+}
 
 const TwitterRetweetAPI = ({ info, data }) => {
     fetch("https://twitter.com/i/api/graphql/ojPdsZsimiJrUGLR1sjUtA/CreateRetweet", {
@@ -147,5 +146,6 @@ const TwitterRetweetAPI = ({ info, data }) => {
 export default {
     TwitterApiCreateTweet,
     TwitterLikeAPI,
-    TwitterRetweetAPI
-}
+    TwitterRetweetAPI,
+    TwitterFollowAPI
+}

+ 33 - 0
src/logic/content/help/getData.js

@@ -0,0 +1,33 @@
+import messageCenter from '@/uilts/messageCenter/content';
+import { getCookie } from '@/uilts/help'
+import axios from 'axios';
+
+const TwitterApiGetUserInfoByName = ({info, data}) => {
+  console.log('TwitterApiGetUserInfoByName', info, data)
+  axios.get(`https://twitter.com/i/api/graphql/mCbpQvZAw6zu_4PvuAUVVQ/UserByScreenName?variables=%7B%22screen_name%22%3A%22${data.screen_name}%22%2C%22withSafetyModeUserFields%22%3Atrue%2C%22withSuperFollowsUserFields%22%3Atrue%7D`, {
+      headers: {
+          "accept": "*/*",
+          "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
+          "authorization": "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA",
+          "content-type": "application/json",
+          "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"101\", \"Google Chrome\";v=\"101\"",
+          "sec-ch-ua-mobile": "?0",
+          "sec-ch-ua-platform": "\"Windows\"",
+          "sec-fetch-dest": "empty",
+          "sec-fetch-mode": "cors",
+          "sec-fetch-site": "same-origin",
+          "x-csrf-token": getCookie('ct0'),
+          "x-twitter-active-user": "yes",
+          "x-twitter-auth-type": "OAuth2Session",
+          "x-twitter-client-language": "en"
+      }
+  }).then(res => {
+    messageCenter.send({ info, data: res.data.data, })
+  }).catch(err => {
+    messageCenter.send({ info, data: {err} })
+  })
+}
+
+export default {
+  TwitterApiGetUserInfoByName
+}

+ 5 - 5
src/logic/content/twitter.js

@@ -1142,7 +1142,7 @@ export function facebookReplyTweet(params) {
 }
 
 export function replyHandle(params) {
-    let iframe = window.parent.document.getElementById(params.postId);
+    let iframe = window.parent.document.getElementById(params.iframeId);
     let replyBtn = iframe.parentNode.parentNode.querySelector('div[data-testid="reply"]') ||
         iframe.parentNode.parentNode.parentNode.querySelector('div[data-testid="reply"]');
     if (replyBtn) {
@@ -1165,8 +1165,8 @@ export function replyHandle(params) {
 
                 let eleList = tweetReply.parentNode.parentNode.parentNode.parentNode.parentNode.querySelectorAll('span[data-text="true"]');
                 reportReplyResult(eleList, params, () => {
-                    // iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_REPLY_RASK_FINSH', data: {} }, '*');
-                    chrome.runtime.sendMessage({ actionType: "CONTENT_RED_PACKET_REPLY_RASK_FINSH", data: { postId: params.postId } }, () => { })
+                    iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_REPLY_RASK_FINSH', data: {postId: params.postId } }, '*');
+                    // chrome.runtime.sendMessage({ actionType: "CONTENT_RED_PACKET_REPLY_RASK_FINSH", data: { postId: params.postId } }, () => { })
                 });
             })
         }
@@ -1222,8 +1222,8 @@ function onReplyDialogOpen(params, iframe) {
                 let eleList = dialog.querySelector('div[contenteditable="true"]').querySelectorAll('span[data-text="true"]');
                 reportReplyResult(eleList, params, () => {
                     // 上報完成
-                    // iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_REPLY_RASK_FINSH', data: {} }, '*');
-                    chrome.runtime.sendMessage({ actionType: "CONTENT_RED_PACKET_REPLY_RASK_FINSH", data: { postId: params.postId } }, () => { })
+                    iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_REPLY_RASK_FINSH', data: {postId: params.postId} }, '*');
+                    // chrome.runtime.sendMessage({ actionType: "CONTENT_RED_PACKET_REPLY_RASK_FINSH", data: { postId: params.postId } }, () => { })
                 })
             });
         }

+ 3 - 0
src/uilts/messageCenter/iframe/messageEnum.js

@@ -15,6 +15,9 @@ const SEND_MESSAGE_ENUM = {
     // ---- 获取推文内容 ----
     IFRAME_DOM_GET_TWEET_TEXT: 'IFRAME_DOM_GET_TWEET_TEXT',
 
+    // ---- 获取twitter用户信息 ----
+    IFRAME_GET_TWITTER_USER_INFO: 'IFRAME_GET_TWITTER_USER_INFO',
+
 
 }
 

+ 57 - 75
src/view/iframe/red-packet/luck-draw.vue

@@ -470,6 +470,7 @@ import { getInviteGuildInfo } from "@/http/discordApi";
 import GlobalTip from '@/view/components/global-tip.vue';
 import customCardCover from '@/view/components/custom-card-cover.vue';
 import { RewardType, PlayType } from "@/types";
+import denet from '@/denet'
 
 var moment = require('moment');
 
@@ -579,13 +580,8 @@ async function clickLikeBtn() {
             break
         case '3':
             state.loading_show = true
-            chrome.tabs.getCurrent((tab) => {
-                chrome.tabs.sendMessage(tab.id, {
-                    actionType: "IFRAME_TWITTER_API_DO_TASK", task_data: {
-                        tweet_Id: state.tweetId
-                    }, task_type: 'like'
-                }, (res) => { console.log(res) });
-            })
+            let likeRes = await denet.content.doTask.like({ tweetId: state.tweetId });
+            likeRes && doTaskReport({...likeRes, task_type: 'like', do_type: 'api'}, {tab: {}});
             break
         default:
             window.open(`https://twitter.com/intent/like?tweet_id=${state.tweetId}`)
@@ -696,13 +692,8 @@ async function clickRetweetBtn() {
             break
         case '3':
             state.loading_show = true
-            chrome.tabs.getCurrent((tab) => {
-                chrome.tabs.sendMessage(tab.id, {
-                    actionType: "IFRAME_TWITTER_API_DO_TASK", task_data: {
-                        tweet_Id: state.tweetId
-                    }, task_type: 'retweet'
-                }, (res) => { console.log(res) });
-            })
+            let retweetRes = await denet.content.doTask.reTweet({ tweetId: state.tweetId });
+            retweetRes && doTaskReport({...retweetRes, task_type: 'retweet', do_type: 'api'}, {tab: {}});
             break
         default:
             window.open(`https://twitter.com/intent/retweet?tweet_id=${state.tweetId}`)
@@ -761,6 +752,7 @@ async function clickReply(params) {
 
     let replyData = {
         postId: state.postId,
+        iframeId: state.iframeId,
         type: params.type,
         taskLuckdropId: state.detail.taskLuckdropId
     }
@@ -1012,16 +1004,20 @@ async function clickFollowAll(item, is_all) {
             arr_name.forEach((item) => {
                 follow_data.push(item)
             })
-            state.loading_show = true
-            chrome.tabs.getCurrent((tab) => {
-                chrome.tabs.sendMessage(tab.id, {
-                    actionType: "IFRAME_TWITTER_API_DO_TASK",
-                    task_data: {
-                        tweet_Id: state.tweetId,
-                        follow_data: follow_data,
-                    },
-                    task_type: 'follow'
-                }, (res) => { console.log(res) });
+            state.loading_show = true;
+            let promiseList = [];
+            for (let i = 0; i < follow_data.length; i++) {
+                promiseList[i] = denet.content.doTask.follows({ follow_name: follow_data[i]['name'], twitterUserId: follow_data[i]['twitterUserId'] });
+            }
+
+            Promise.allSettled(promiseList).then((res) => {
+                if (res && res.length) {
+                    let resList = res.filter(item => item.status == 'fulfilled');
+                    for (let i = 0; i < resList.length; i++) {
+                      let item = resList[i].value;
+                      item && doTaskReport({...item, task_type: 'follow', task_data: {follow_name: item.follow_name}, do_type: 'api'}, {tab: {}});
+                    }
+                }
             })
 
             break
@@ -1072,16 +1068,38 @@ const reSetBindTwtterId = (_params) => {
     })
 }
 
-const reportBindTweetSuccess = (params) => {
+const reportBindTweetSuccess = async (params) => {
     let { discordTask, srcUserId } = params || {};
     discordTaskDetail = discordTask;
-    sendCurrentTabMessage({
-        actionType: "IFRAME_API_GET_TWEET_USER_INFO_REQ",
-        data: {
-            screen_name: srcUserId,
-            tweetId: state.tweetId
-        }
-    })
+
+    let {user = {}} = await denet.content.getData.getUserInfoByName({ screen_name: srcUserId });
+    if (user && user.result && user.result.legacy) {
+      let legacy = user.result.legacy;
+      reportParams.twitterFans = legacy ? legacy.followers_count : 0;
+
+      if (!discordTaskDetail) {
+          if (reportParams.hasReport) return;
+          reportParams.hasReport = true;
+          Report.reportLog({
+              objectType: Report.objectType.tweetPostBinded,
+              twitterFans: reportParams.twitterFans,
+              redPacketType: 1,
+              postId: state.postId
+          });
+      } else {
+          if (reportParams.discordFans !== '') {
+              if (reportParams.hasReport) return;
+              reportParams.hasReport = true;
+              Report.reportLog({
+                  objectType: Report.objectType.tweetPostBinded,
+                  twitterFans: reportParams.twitterFans,
+                  discordFans: reportParams.discordFans,
+                  redPacketType: 1,
+                  postId: state.postId
+              });
+          }
+      }
+    }
 
     if (discordTask) {
         getDiscordInfo({ inviteUrl: JSON.parse(discordTask.bizData).inviteUrl }, (res) => {
@@ -1455,7 +1473,7 @@ function initTaskDetail(cb) {
 let tab_index = 0
 const doTaskReport = (req, sender) => {
     state.loading_show = false
-    let follow_name = req.task_data.follow_name || ''
+    let follow_name = req.task_data ? req.task_data.follow_name : '';
     // 1 Twitter follow Twitter ScreenName
     // 2 Tweet like
     // 3 Retweet
@@ -1564,6 +1582,8 @@ onMounted(() => {
     state.process_mode = process.env.NODE_ENV
     state.postId = getQueryString('postId')
     state.window_origin = getQueryString('window_origin') || '';
+    state.iframeId = getQueryString('iframeId') || ''
+
     if (state.window_origin.indexOf('twitter.com') > -1) {
         state.tweetId = getQueryString('tweetId')
         state.tweet_author = getQueryString('tweet_author');
@@ -1968,8 +1988,10 @@ function onWindowMessage() {
         if (event.data) {
             switch (event.data.actionType) {
                 case 'CONTENT_RED_PACKET_REPLY_RASK_FINSH':
-                    state.done.reply = true;
-                    state.done.reply_red = false;
+                    if (event.data.data.postId == state.postId) {
+                        state.done.reply = true;
+                        state.done.reply_red = false;
+                    }
                     break;
                 case 'CONTENT_RED_PACKET_GET_TWEET_AUTHOR':
                     fullName = event.data.data.fullName
@@ -2008,42 +2030,6 @@ function onRuntimeMsg() {
                 state.loading_show = false
                 doTaskReport(req, sender);
                 break;
-            case 'CONTENT_RED_PACKET_REPLY_RASK_FINSH':
-                if (req.data && req.data.postId == state.postId) {
-                    state.done.reply = true;
-                    state.done.reply_red = false;
-                }
-                break;
-            case 'CONTENT_API_GET_TWEET_USER_INFO_RES':
-                let { user } = req.data || {};
-                if (req.tweetId == state.tweetId && user && user.result && user.result.legacy) {
-                    let legacy = user.result.legacy;
-                    reportParams.twitterFans = legacy ? legacy.followers_count : 0;
-
-                    if (!discordTaskDetail) {
-                        if (reportParams.hasReport) return;
-                        reportParams.hasReport = true;
-                        Report.reportLog({
-                            objectType: Report.objectType.tweetPostBinded,
-                            twitterFans: reportParams.twitterFans,
-                            redPacketType: 1,
-                            postId: state.postId
-                        });
-                    } else {
-                        if (reportParams.discordFans !== '') {
-                            if (reportParams.hasReport) return;
-                            reportParams.hasReport = true;
-                            Report.reportLog({
-                                objectType: Report.objectType.tweetPostBinded,
-                                twitterFans: reportParams.twitterFans,
-                                discordFans: reportParams.discordFans,
-                                redPacketType: 1,
-                                postId: state.postId
-                            });
-                        }
-                    }
-                }
-                break;
             case 'USER_SETTING':
                 setNotification(req.data)
                 break;
@@ -2171,10 +2157,6 @@ function discordAuth(actionState = 'default') {
                     type: 'normal',
                     url: authorizeUrl
                 }, function (window) {
-                    let windowId = window.id;
-                    callEventPageMethod("RED_PACKET_SAVE_DISCORD_AUTH_WINDOW_ID", {
-                        windowId: windowId
-                    });
                 })
             }
         }

+ 0 - 4
src/view/iframe/red-packet/red-packet.vue

@@ -1964,10 +1964,6 @@ function discordAuth(actionState = 'default') {
           type: 'normal',
           url: authorizeUrl
         }, function (window) {
-          let windowId = window.id;
-          callEventPageMethod("RED_PACKET_SAVE_DISCORD_AUTH_WINDOW_ID", {
-            windowId: windowId
-          });
         })
       }
     }