V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzerd
V2EX  ›  推广

自已家的赣南脐橙开卖,给 v 友抽几箱

  •  
  •   zzerd · 23 小时 33 分钟前 · 4101 次点击

    抽奖规则和去年一样取上证指数和最后指定日期最高楼。上一年的帖子/996196

    今年取 2024-11-22 上证指数收盘价作为随机数种子,有效抽奖用户为 2024-11-22 帖子回复最高楼层前的所有所有人

    去年的抽奖代码没有去重所有回复多个的用户中的概率高一点点,今年我用 ai 糊了一下。代码如下

    const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36';
    
    async function handleRequest(tid, num, seedParam, maxFloor) {
        if (!tid || isNaN(num)) {
            console.error('请提供有效的帖子 ID 和抽奖人数');
            return;
        }
        console.log(`Fetching OP for TID: ${tid}`);
        const op = await getOp(tid);
        console.log(`OP: ${op}`);
        console.log(`Fetching all users for TID: ${tid}`);
        const uniqueUserList = await getAllUser(tid, maxFloor);
        console.log(`Unique Users: ${uniqueUserList.join(', ')}`);
        const filteredUserList = uniqueUserList.filter(user => user !== op);
        console.log(`Filtered Users: ${filteredUserList.join(', ')}`);
        const userCount = filteredUserList.length;
        console.log(`User Count: ${userCount}`);
        const seed = seedParam !== null ? seedParam : userCount.toString();
        console.log(`Seed: ${seed}`);
        console.log(`Max Floor: ${maxFloor}`);
        const combinedSeed = `${seed}-${maxFloor}`;
        console.log(`Combined Seed: ${combinedSeed}`);
        const shuffledList = shuffle(filteredUserList, combinedSeed);
        console.log(`Shuffled Users: ${shuffledList.join(', ')}`);
        const result = `符合条件的用户共有 ${filteredUserList.length} 人
    抽奖结果:
    ${shuffledList.slice(0, num).join('\n')}`;
        console.log(result);
    }
    
    async function getOp(tid) {
        const url = `https://www.v2ex.com/amp/t/${tid}`;
        console.log(`Fetching OP URL: ${url}`);
        const response = await fetch(url, { headers: { 'User-Agent': UA } });
        if (!response.ok) {
            console.log(`Failed to fetch OP: ${response.status} ${response.statusText}`);
            return null;
        }
        const text = await response.text();
        const match = /<div class="topic_author">[\s\S]*?<amp-img[^>]+alt="([^"]+)"[\s\S]*?<\/div>/.exec(text);
        console.log(`OP Match: ${match ? match[1] : null}`);
        return match ? match[1].trim() : null;
    }
    
    async function getUserList(url, startIndex, endIndex) {
        console.log(`Fetching User List URL: ${url}`);
        const response = await fetch(url, { headers: { 'User-Agent': UA } });
        if (!response.ok) {
            console.log(`Failed to fetch User List: ${response.status} ${response.statusText}`);
            return [];
        }
        const text = await response.text();
        const replyItemRegex = /<div class="reply_item">([\s\S]*?)<\/div>/g;
        let replyItemMatch;
        const users = [];
        let currentIndex = startIndex || 0;
        while ((replyItemMatch = replyItemRegex.exec(text)) !== null) {
            if (endIndex !== undefined && currentIndex >= endIndex) {
                break;
            }
            const replyItem = replyItemMatch[1];
            const altRegex = /<amp-img[^>]+alt="([^"]+)"[^>]*>/g;
            const altMatch = altRegex.exec(replyItem);
            if (altMatch) {
                users.push(altMatch[1]);
            }
            currentIndex++;
        }
        console.log(`Matches: ${users.join(', ')}`);
        return users;
    }
    
    async function getAllPages(tid) {
        const url = `https://www.v2ex.com/amp/t/${tid}`;
        console.log(`Fetching All Pages URL: ${url}`);
        const response = await fetch(url, { headers: { 'User-Agent': UA } });
        if (!response.ok) {
            console.log(`Failed to fetch All Pages: ${response.status} ${response.statusText}`);
            return [];
        }
        const text = await response.text();
        const pageCountMatch = /\u5171 (\d+) \u9875/.exec(text);
        const pageCount = pageCountMatch ? parseInt(pageCountMatch[1], 10) : 1;
        console.log(`Page Count: ${pageCount}`);
        const pages = [];
        for (let i = 1; i <= pageCount; i++) {
            pages.push(`${url}/${i}`);
        }
        return pages;
    }
    
    async function getAllUser(tid, maxFloor) {
        const pages = await getAllPages(tid);
        console.log(`Pages: ${pages.join(', ')}`);
        let allUsers = [];
        let currentFloor = 0;
        for (let page of pages) {
            const startIndex = currentFloor;
            const endIndex = maxFloor !== undefined ? maxFloor : undefined;
            const users = await getUserList(page, startIndex, endIndex);
            allUsers = allUsers.concat(users);
            currentFloor += users.length;
            if (endIndex !== undefined && currentFloor >= endIndex) {
                break;
            }
        }
        const uniqueUsers = [];
        const seen = new Set();
        for (const user of allUsers) {
            if (!seen.has(user)) {
                uniqueUsers.push(user);
                seen.add(user);
            }
        }
        console.log(`Unique Users: ${uniqueUsers.join(', ')}`);
        return uniqueUsers;
    }
    
    function shuffle(array, seed) {
        const rng = lcg(seed);
        console.log(`Shuffling with Seed: ${seed}`);
        for (let i = array.length - 1; i > 0; i--) {
            const j = Math.floor(rng() * (i + 1));
            console.log(`Shuffling: i=${i}, j=${j}`);
            if (array[i] !== undefined && array[j] !== undefined) {
                [array[i], array[j]] = [array[j], array[i]];
            } else {
                console.log(`Error: array[i] or array[j] is undefined. i=${i}, j=${j}, array[i]=${array[i]}, array[j]=${array[j]}`);
            }
        }
        return array;
    }
    
    function lcg(seed) {
        let state = hashCode(seed);
        console.log(`LCG State: ${state}`);
        const a = 1664525;
        const c = 1013904223;
        const m = Math.pow(2, 32);
        return function() {
            state = (a * state + c) % m;
            console.log(`LCG Next: ${state / m}`);
            return state / m;
        }
    }
    
    function hashCode(str) {
        l
    ![]( https://i.v2ex.co/VlpwI4y5.jpeg)
    et hash = 0;
        for (let i = 0; i < str.length; i++) {
            const char = str.charCodeAt(i);
            hash = ((hash << 5) - hash) + char;
            hash |= 0;
        }
        return Math.abs(hash);
    }
    
    // Example usage:
    handleRequest('123456', 3, seed123, 10);
    这里的 '123456' 是帖子 ID ,3 是抽奖人数,'seed123' 是种子(可选),10 是最大楼层(可选)。
    在 V2EX 网站里用浏览器 consele 运行就可以
    

    为了方便 v 友进行类似抽奖我糊了一个 cloudflare work 来使用直接请求 https://v2ex.240801.xyz/?tid=12345&num=10&seed=12345&maxFloor=11(大佬别打,刚装上访问不了可能 cf 路由没设置好)这里的参数说明为 tid 为帖子 id num 为中奖人数 seed 为随机数种子 maxFloor 为最高楼层

    下面是橙子链接请大家按需购买

    ps 甜度不用担心,今年我们县的都甜。现摘现发没有清洗打腊,只要老家不下雨一般下单第二天就发货。室温 20 度以内还是很耐放的两三个星期没啥问题。有个卖橙子的微信群想加的加我微信 console.log(atob('enF3MjAwOA=='))拉群

    第 1 条附言  ·  14 小时 38 分钟前

    今年的橙子我也还没吃上,这图都是前段时间家时机人拍的现在橙子应该黄一些了。

    为啥这次的代码块没有高亮。。。代码看起来多,是因为ai 写的取回复用户数没用v站的api,下面是去除相关爬虫代码后的代码:https://gist.github.com/zzerding/d80d25149a74c0dd96516d949e9e52b7

    cloudflare work我会改为api形式代码后续在上面的gist里更新

    晚上12点以后可根据规则自行开奖

    第 2 条附言  ·  13 小时 10 分钟前

    统一回复一下:

    橙子大约9分甜一分酸,每个人的口感不一样可以进群问问去年的v友

    可以发顺丰。晚上熬夜开的团图片先错了,里面有顺丰的商品链接大约江西周边9省53r/5kg

    好了不摸鱼了领导催进度了

    527 条回复    2024-11-22 23:42:19 +08:00
    1  2  3  4  5  6  
    xianxiancr2
        101
    xianxiancr2  
       14 小时 19 分钟前
    分子+1
    guogews
        102
    guogews  
       14 小时 17 分钟前
    争当分子
    bcys
        103
    bcys  
       14 小时 17 分钟前
    重在参与
    ashrkq
        104
    ashrkq  
       14 小时 16 分钟前
    重在参与
    spemoon
        105
    spemoon  
       14 小时 16 分钟前
    祝大卖
    ropon
        106
    ropon  
       14 小时 15 分钟前
    中奖
    coderth
        107
    coderth  
       14 小时 15 分钟前
    重在参与~
    yunmeng
        108
    yunmeng  
       14 小时 15 分钟前
    重在参与
    loren0912
        109
    loren0912  
       14 小时 14 分钟前
    期待,跟贴冲!
    benzalus
        110
    benzalus  
       14 小时 14 分钟前
    好奇,op 选邮政快递的原因是网点问题么
    BALLACK
        111
    BALLACK  
       14 小时 13 分钟前
    支持
    xianchen926
        112
    xianchen926  
       14 小时 13 分钟前
    江西人想吃老家的橙子了🍊
    pigfloyd
        113
    pigfloyd  
       14 小时 12 分钟前
    试试
    alct
        114
    alct  
       14 小时 12 分钟前 via iPhone
    支持一下支持一下
    immit
        115
    immit  
       14 小时 11 分钟前
    分母,试试
    WANHOO
        116
    WANHOO  
       14 小时 10 分钟前
    重在参与!
    4912941
        117
    4912941  
       14 小时 10 分钟前
    分子
    jimdra
        118
    jimdra  
       14 小时 10 分钟前
    牛啊
    yangJunKing
        119
    yangJunKing  
       14 小时 9 分钟前
    分子
    GeekHao
        120
    GeekHao  
       14 小时 9 分钟前
    +1
    Alison1113
        121
    Alison1113  
       14 小时 8 分钟前
    好吃吗?想问问,想买
    Latin
        122
    Latin  
       14 小时 8 分钟前
    永远不中体
    fengfisher3
        123
    fengfisher3  
       14 小时 7 分钟前
    虽然每次都抽不中,所以,我在别的地方买了。
    Maxwells8
        124
    Maxwells8  
       14 小时 7 分钟前
    码选之人
    MondaySmile
        125
    MondaySmile  
       14 小时 7 分钟前
    分母
    starlin
        126
    starlin  
       14 小时 7 分钟前
    重在参与
    Jason0803
        127
    Jason0803  
       14 小时 7 分钟前
    分子
    coderzhangsan
        128
    coderzhangsan  
       14 小时 4 分钟前
    支持
    xhadmin
        129
    xhadmin  
       14 小时 4 分钟前
    重在参与!
    liyinhe
        130
    liyinhe  
       14 小时 3 分钟前
    分母加一,重在参与!
    supersadmin
        131
    supersadmin  
       14 小时 2 分钟前
    +1
    sanshiliu
        132
    sanshiliu  
       14 小时 2 分钟前
    做个分母
    null00
        133
    null00  
       14 小时 1 分钟前
    重在参与
    duandage0812
        134
    duandage0812  
       14 小时 0 分钟前
    重在参与~
    juzidong
        135
    juzidong  
       14 小时 0 分钟前
    分子
    ldyisbest
        136
    ldyisbest  
       13 小时 59 分钟前
    支持
    mingliao
        137
    mingliao  
       13 小时 59 分钟前
    ala2008
        138
    ala2008  
       13 小时 58 分钟前
    前女友家也有,哭
    a2519862329
        139
    a2519862329  
       13 小时 57 分钟前
    +1
    kylinC
        140
    kylinC  
       13 小时 57 分钟前
    +1
    srddpzbx
        141
    srddpzbx  
       13 小时 56 分钟前
    祝我敬享甜橙!
    yoyo989899
        142
    yoyo989899  
       13 小时 55 分钟前
    重在参与!
    yngby
        143
    yngby  
       13 小时 55 分钟前
    重在参与
    imch1n
        144
    imch1n  
       13 小时 54 分钟前
    文字支持一下
    Isaaccccccc
        145
    Isaaccccccc  
       13 小时 53 分钟前
    支持一下
    kunkunzhang
        146
    kunkunzhang  
       13 小时 53 分钟前
    你们都是分母,我是分子
    c4dfan
        147
    c4dfan  
       13 小时 52 分钟前
    隔壁省的来凑个分母。。。。
    shinelamla
        148
    shinelamla  
       13 小时 52 分钟前
    说不定中了呢!
    nicholaswan
        149
    nicholaswan  
       13 小时 51 分钟前
    参与
    jrlee1204
        150
    jrlee1204  
       13 小时 51 分钟前
    参与一个
    incubus
        151
    incubus  
       13 小时 50 分钟前
    参与一下
    ivanchou
        152
    ivanchou  
       13 小时 47 分钟前
    当分母 祝楼主大卖
    uniqueFlynn
        153
    uniqueFlynn  
       13 小时 47 分钟前
    已买,抽个玩玩
    Danmen123
        154
    Danmen123  
       13 小时 47 分钟前
    试试
    chenliangngng
        155
    chenliangngng  
       13 小时 47 分钟前
    拉低概率
    plusliang
        156
    plusliang  
       13 小时 46 分钟前
    重在参与!
    7i587i789
        157
    7i587i789  
       13 小时 46 分钟前
    进行一个分母的当
    Petercao008
        158
    Petercao008  
       13 小时 45 分钟前
    分母+1
    Aimirr
        159
    Aimirr  
       13 小时 45 分钟前
    分母+1
    whqijy
        160
    whqijy  
       13 小时 45 分钟前
    分子+1
    Dizzy226
        161
    Dizzy226  
       13 小时 44 分钟前
    试试运气
    xavi818
        162
    xavi818  
       13 小时 44 分钟前
    支持一下
    forevam
        163
    forevam  
       13 小时 43 分钟前
    尝试中奖 重在参与!
    ylrshui
        164
    ylrshui  
       13 小时 42 分钟前
    看看运气+1
    wwwtarzan
        165
    wwwtarzan  
       13 小时 42 分钟前
    分子
    yahaoo
        166
    yahaoo  
       13 小时 41 分钟前
    1
    Evovil
        167
    Evovil  
       13 小时 41 分钟前
    参与参与
    ammeto
        168
    ammeto  
       13 小时 41 分钟前
    支持一下
    whythings
        169
    whythings  
       13 小时 41 分钟前
    支持一下
    zhangsimon
        170
    zhangsimon  
       13 小时 39 分钟前
    我是分子,预祝大卖!
    Lilithia
        171
    Lilithia  
       13 小时 38 分钟前
    让我尝尝!
    xyqy
        172
    xyqy  
       13 小时 37 分钟前
    重在参与!支持一下
    zerowxxyf
        173
    zerowxxyf  
       13 小时 37 分钟前
    参与
    WayTooExplore
        174
    WayTooExplore  
       13 小时 36 分钟前
    参与
    o0OoO0o
        175
    o0OoO0o  
       13 小时 36 分钟前
    分母
    xiaopenyou
        176
    xiaopenyou  
       13 小时 36 分钟前
    支持一下
    ABrother
        177
    ABrother  
       13 小时 34 分钟前
    参与一下
    Lexin914
        178
    Lexin914  
       13 小时 34 分钟前
    支持一下
    youngzhaojia
        179
    youngzhaojia  
       13 小时 33 分钟前
    支持一下
    willxiang
        180
    willxiang  
       13 小时 32 分钟前
    重在参与!
    qingchangaas
        181
    qingchangaas  
       13 小时 32 分钟前
    支持一下
    Moierby
        182
    Moierby  
       13 小时 32 分钟前
    老板生意兴隆
    nevermoreluo
        183
    nevermoreluo  
       13 小时 32 分钟前
    试试
    zhangyq008
        184
    zhangyq008  
       13 小时 31 分钟前
    重在参与
    hack2012
        185
    hack2012  
       13 小时 30 分钟前
    真的假的
    t298
        186
    t298  
       13 小时 28 分钟前
    我来组成头部
    bananaplan
        187
    bananaplan  
       13 小时 28 分钟前
    我第一回评论吧
    Picmen
        188
    Picmen  
       13 小时 28 分钟前
    我来组成分子
    huyoa
        189
    huyoa  
       13 小时 27 分钟前
    天命分子!!!
    lvyouchn
        190
    lvyouchn  
       13 小时 26 分钟前
    支持一下
    suwia
        191
    suwia  
       13 小时 25 分钟前
    重在参与!
    RLinux
        192
    RLinux  
       13 小时 24 分钟前
    +1
    sb
        193
    sb  
       13 小时 23 分钟前
    测试中奖
    niuxinghua
        194
    niuxinghua  
       13 小时 22 分钟前
    参与下
    ily433664
        195
    ily433664  
       13 小时 22 分钟前
    已经买了同事家的脐橙,今年的品质挺不错了
    dishuibaby
        196
    dishuibaby  
       13 小时 22 分钟前
    参与快乐
    nanbobo
        197
    nanbobo  
       13 小时 22 分钟前
    重在参与!
    erlkingrui999
        198
    erlkingrui999  
       13 小时 21 分钟前
    分母来也
    webertyan
        199
    webertyan  
       13 小时 21 分钟前
    参与!
    rabitzn
        200
    rabitzn  
       13 小时 20 分钟前
    这个不错 参与一下
    1  2  3  4  5  6  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2313 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:01 · PVG 00:01 · LAX 08:01 · JFK 11:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.