c++ 判断一个url地址是否合格_一个简单的知乎抽奖器

本文介绍了如何使用C++判断一个URL地址的合法性,并提供了一个简单的知乎抽奖器的使用步骤。用户需要在浏览器的开发者工具控制台中运行代码,通过输入不同的参数来抽取不同条件的获奖者。注意,程序不包含验证参与者是否为粉丝的功能。
摘要由CSDN通过智能技术生成
// 获取知乎想法 ID
var id = window.location.href.split('/').pop();

// 知乎获取想法动作的 API
var baseurl = `https://api.zhihu.com/pins/${id}/actions?limit=20&withCredentials=true&offset=0`;
var commenturl = `https://www.zhihu.com/api/v4/pins/${id}/comments?order=normal&status=open&limit=20&offset=0`;

// 引入知乎允许来源的工具脚本
var body = document.getElementsByTagName('body')[0];
var jsNode = document.createElement('script');
jsNode.setAttribute('type', 'text/javascript');
jsNode.setAttribute('src', 'https://res.wx.qq.com/a/wx_fed/webwx/res/static/vendor/vendor_216b004.js');


// 定义数据数组

var repins = [], likes = [], comments = [];
var finaldata = [];
// 获取 JSON 内容
async function get(url) {

    return await $.ajax({
        url: url,
        type: 'GET',
        dataType: "json",
    });
}


// 主程序 
// count:抽奖名额数量
// mode:抽奖模式,可以由转发、鼓掌、评论任意排列
// gender:是否有性别限定,默认无,男生 1,女生 0
// like_count:仅针对评论抽奖,评论点赞数量
async function 抽奖(count = 1, mode = '转发',gender=-1,like_count=0) {
    if (mode.indexOf('转发') > -1 || mode.indexOf('鼓掌') > -1) {
        var jsdata = await get(baseurl);
        while (true) {
            // 获取动作数据
            var actions = jsdata.data;
            // 遍历动作
            for (var action of actions) {
                var member = action.member;
                if(gender>-1){
                    if(member.gender!=gender){
                        continue
                    }
                }
                
                if (action.action_type == 'repin') {// 如果动作是转发
                    // 如果没有重复
                    if (JSON.stringify(repins).indexOf(member.url) == -1 ) {
                        repins.push(
                            {
                                name: member.name,
                                url_token: member.url_token,
                                url:member.url,
                                gender:member.gender
                            }
                        );
                    }
                } else if (action.action_type == 'like') {
                    if (JSON.stringify(likes).indexOf(member.url) == -1) {
                        likes.push(
                            {
                                name: member.name,
                                url_token: member.url_token,
                                url:member.url,
                                gender:member.gender
                            }
                        );
                    }
                }
            }
            if (jsdata.paging.is_end) {
                break;
            } else {
                jsdata = await get(`https://api.zhihu.com/pins/${id}/actions?limit=20&withCredentials=true&offset=${jsdata.paging.next.split('offset=')[1]}`);
            }
        }
    }
    if (mode.indexOf('评论') > -1) {
        var jsdata = await get(commenturl);
        while (true) {
            // 获取动作数据
            var actions = jsdata.data;
            // 遍历动作
            for (var action of actions) {
                var member = action.author.member;
                if(gender>-1){
                    if(member.gender!=gender){
                        continue
                    }
                }
                if(action.vote_count && action.vote_count<like_count){
                    continue
                }
                // 如果没有重复
                if (JSON.stringify(comments).indexOf(member.url) == -1) {
                    comments.push(
                        {
                            name: member.name,
                            url_token: member.url_token,
                            content: action.content,
                            url:member.url,
                            gender:member.gender
                        }
                    );
                }
            }
            if (jsdata.paging.is_end) {
                break;
            } else {
                jsdata = await get(`https://www.zhihu.com/api/v4/pins/${id}/comments?order=normal&status=open&limit=20&offset=${jsdata.paging.next.split('offset=')[1]}`);
            }
        }
    }

    // 根据参数判断
    if (mode.indexOf('评论') > -1) {
        finaldata = comments;
    }
    if (mode.indexOf('鼓掌') > -1) {
        if (finaldata.length == 0) {
            finaldata = likes;
        } else {
            finaldata = finaldata.filter(
                item => {
                    return JSON.stringify(likes).indexOf(item.url_token) > -1;
                }
            );
        }
    }
    if (mode.indexOf('转发') > -1) {
        if (finaldata.length == 0) {
            finaldata = repins;
        } else {
            finaldata = finaldata.filter(
                item => {
                    return JSON.stringify(repins).indexOf(item.url_token) > -1;
                }
            );
        }
    }
    

    // 根据有效人数输出文案
    if (finaldata.length == 0) {
        console.log("本次没有符合条件的人,无法抽奖。");
    } else if (finaldata.length == 1) {
        console.log(`本次只有一个符合条件的人: “${finaldata[0].name}”,地址为 https://www.zhihu.com/people/${finaldata[0].url_token}`)
    } else {

        console.group("本次抽奖名单为:");
        finaldata.forEach((item,index)=>{
            console.log(`${index + 1}. ${item.name}`);

        });
        console.groupEnd();

        console.log(`本次抽奖有效人数为:${finaldata.length}`);
        console.log(`本次抽奖名额数为:${count}`);

        if (count == 1) {
            var r = parseInt(Math.random() * (finaldata.length), 10);
            if(finaldata[r].content !== undefined){
                console.log(`中奖者的名字为 “${finaldata[r].name}”,地址为 https://www.zhihu.com/people/${finaldata[r].url_token} ,他说:${finaldata[r].content}`);
            }else{
                console.log(`中奖者的名字为 “${finaldata[r].name}”,地址为 https://www.zhihu.com/people/${finaldata[r].url_token}`);
             
            }
        } else {
            if (count >= finaldata.length) {
                console.log('很尴尬的是,你这人不够抽的啊,那就……全部中奖?')
            } else {
                for (let index = 0; index < count; index++) {
                    var r = parseInt(Math.random() * (finaldata.length), 10);
                    if(finaldata[r].content !== undefined){
                        console.log(`第${index + 1}个中奖者的名字为 “${finaldata[r].name}”,地址为 https://www.zhihu.com/people/${finaldata[r].url_token} ,他说:${finaldata[r].content}`);
                    }else{
                        console.log(`第${index + 1}个中奖者的名字为 “${finaldata[r].name}”,地址为 https://www.zhihu.com/people/${finaldata[r].url_token}`);
                    }
                    finaldata.splice(r, 1);
                }
            }

        }

    }
    console.log('Powered by 一个简单的知乎抽奖器')
}

body.appendChild(jsNode);

使用方法:

第一步:复制

把上面那一大串代码,按 Ctrl+C 复制。

第二步:在电脑打开那条想法

在手机知乎打开那条想法,复制链接,分享到微信,然后在电脑浏览器打开。

第三步:打开开发者工具

可以按 F12,也可以右键菜单 --> 检查。

第四步:跳转到 Console/控制台 页面

7ffb3b9b842bc574e849837895cc3fe2.png

第五步:粘贴:

ef007bb6631b8efcc1e91ec3007f657c.png

第六步:回车

敲下你的 Enter 键。

第七步:输入

刚才粘贴了抽奖程序,接下来就需要运行了。

那么问题来了,有些人要抽3个人,有些人要抽1个人;有些人只要转发就送大电视,有些人需要转发并鼓掌。所以,我设计了两个参数,按需改变。

比如,如果你想要在转发里面,抽出一个人,那么你就这么用:

抽奖(1,"转发")

或者也可以用缩略的说法:

抽奖()

如果你想要的是,在鼓掌里面,抽出2个人,那么你就这么用:

抽奖(2,"鼓掌")

如果你想要的是,在转发并鼓掌里面,抽出10个人,那么你就这么用:

抽奖(10,"转发并鼓掌")

第八步:回车并等待结果

比如你刚才如果输入的是:抽奖()

39c2c4649df4ede41db4236848bff136.png

那么,回车一下,你就会得到下面的结果:

12efa3f236e40c0027cc53fed232dbad.png

注意事项:

  1. 受知乎安全限制,本程序无法检测这个人是否为粉丝,需要大家自己手动检测;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为AI语言模型,我并不具备网页制作的能力。但我可以提供Python实现知乎登录的代码。 前提条件:需要安装selenium和chromedriver。 1. 导入必要的库 ``` from selenium import webdriver from selenium.webdriver.common.keys import Keys import time ``` 2. 加载浏览并打开知乎登录页面 ``` browser = webdriver.Chrome() browser.get('https://www.zhihu.com/signin') ``` 3. 定位用户名和密码输入框,输入用户名和密码 ``` username = browser.find_element_by_name('username') password = browser.find_element_by_name('password') username.send_keys('your_zhihu_username') password.send_keys('your_zhihu_password') ``` 4. 定位登录按钮,点击登录 ``` submit = browser.find_element_by_css_selector('button.SignFlow-submitButton') submit.click() ``` 5. 登录成功后,页面自动跳转到知乎首页,暂停几秒以观察效果 ``` time.sleep(3) ``` 6. 关闭浏览窗口 ``` browser.close() ``` 完整代码: ``` from selenium import webdriver from selenium.webdriver.common.keys import Keys import time browser = webdriver.Chrome() browser.get('https://www.zhihu.com/signin') username = browser.find_element_by_name('username') password = browser.find_element_by_name('password') username.send_keys('your_zhihu_username') password.send_keys('your_zhihu_password') submit = browser.find_element_by_css_selector('button.SignFlow-submitButton') submit.click() time.sleep(3) browser.close() ``` ### 回答2: 要使用Python编写知乎登录页面,首先需要了解知乎的登录接口及相关参数。可以通过抓包工具获取登录接口的URL和需要提交的参数。 接下来,需要用到Python的库来进行网络请求和数据处理。可以使用requests库发送登录请求,BeautifulSoup库解析登录页面的HTML内容。 首先,导入所需库: ``` import requests from bs4 import BeautifulSoup ``` 构建登录函数,函数体如下: ``` def login(username, password): login_url = "https://www.zhihu.com/signin" # 登录页面的URL session = requests.Session() # 建立会话 # 获取登录页面的HTML内容 login_page = session.get(login_url) soup = BeautifulSoup(login_page.text, 'html.parser') # 获取登录所需的参数 xsrf = soup.find('input', {'name': '_xsrf'})['value'] captcha = soup.find('input', {'name': 'captcha-id'})['value'] timestamp = soup.find('input', {'name': 'timestamp'})['value'] # 构建登录所需的数据 data = { "_xsrf": xsrf, "captcha": captcha, "password": password, "timestamp": timestamp, "username": username } # 发送登录请求 response = session.post(login_url, data=data) if response.status_code == 200: print("登录成功") else: print("登录失败") ``` 以上代码中,登录函数接收两个参数,即用户名和密码。首先通过会话发起GET请求获取登录页面的HTML内容,然后使用BeautifulSoup解析HTML内容,获取登录所需的参数。 接着,构建数据字典data,包含需要提交的参数,如_xsrf、captcha、password、timestamp和username。然后使用会话的post方法发送登录请求,将data作为表单数据传递过去。 最后,根据登录请求的响应状态码来判断登录是否成功。 调用登录函数: ``` login("your_username", "your_password") ``` 替换"your_username"和"your_password"为你的用户名和密码。运行后即可模拟登录知乎
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值