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

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

  •  
  •   zzerd · 23 小时 46 分钟前 · 4120 次点击

    抽奖规则和去年一样取上证指数和最后指定日期最高楼。上一年的帖子/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 小时 51 分钟前

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

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

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

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

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

    统一回复一下:

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

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

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

    527 条回复    2024-11-22 23:42:19 +08:00
    1  2  3  4  5  6  
    cs5791393
        301
    cs5791393  
       11 小时 9 分钟前
    重在参与!
    zhaojiejoe
        302
    zhaojiejoe  
       11 小时 8 分钟前
    分子
    xujunjie
        303
    xujunjie  
       11 小时 4 分钟前
    支持
    570956418
        304
    570956418  
       11 小时 1 分钟前
    参与一下
    cjlsky
        305
    cjlsky  
       10 小时 59 分钟前
    回购的第二年
    robot2134
        306
    robot2134  
       10 小时 58 分钟前 via Android
    +1
    defunct9
        307
    defunct9  
       10 小时 54 分钟前
    分子
    dropdatabase
        308
    dropdatabase  
       10 小时 52 分钟前
    1
    s609926202
        309
    s609926202  
       10 小时 45 分钟前
    +1
    JerryV2
        310
    JerryV2  
       10 小时 44 分钟前
    +1
    xier9213
        311
    xier9213  
       10 小时 41 分钟前
    分母+1
    ecee
        312
    ecee  
       10 小时 40 分钟前
    +1
    bomjack
        313
    bomjack  
       10 小时 40 分钟前
    重在参与
    kzmdididi
        314
    kzmdididi  
       10 小时 40 分钟前
    大麦
    vimfaith
        315
    vimfaith  
       10 小时 36 分钟前
    重在参与!
    PeterPig
        316
    PeterPig  
       10 小时 35 分钟前 via iPhone
    +1
    vimfaith
        317
    vimfaith  
       10 小时 35 分钟前
    重在参与
    nellace
        318
    nellace  
       10 小时 35 分钟前
    重在参与!
    cqq626432432
        319
    cqq626432432  
       10 小时 34 分钟前
    重在参与!
    ma836323493
        320
    ma836323493  
       10 小时 33 分钟前
    做个分子
    jaylengao
        321
    jaylengao  
       10 小时 32 分钟前
    重在参与
    wxd21020
        322
    wxd21020  
       10 小时 31 分钟前
    支持
    hnbcinfo
        323
    hnbcinfo  
       10 小时 30 分钟前
    大家好,我是分母。重在掺和,拉低各位中奖率就是我的目标
    myxvhgiile
        324
    myxvhgiile  
       10 小时 29 分钟前
    参与一下
    wangofjian
        325
    wangofjian  
       10 小时 29 分钟前
    凑个分子
    ip7x12v5
        326
    ip7x12v5  
       10 小时 25 分钟前
    试试
    seeyourface
        327
    seeyourface  
       10 小时 24 分钟前
    参与一下
    qwas
        328
    qwas  
       10 小时 24 分钟前
    橙不橙子不重要,看到队伍占个位
    meteor957
        329
    meteor957  
       10 小时 23 分钟前
    分母+1
    markchen88
        330
    markchen88  
       10 小时 23 分钟前
    参与
    raydied
        331
    raydied  
       10 小时 23 分钟前
    分子分母都+1
    paullige
        332
    paullige  
       10 小时 22 分钟前
    感谢
    keaidian
        333
    keaidian  
       10 小时 21 分钟前
    幸运之子!
    lilicheng
        334
    lilicheng  
       10 小时 20 分钟前
    那就让我尝尝吧
    jykid
        335
    jykid  
       10 小时 20 分钟前
    那让我来试试
    SkYouth
        336
    SkYouth  
       10 小时 19 分钟前
    重在参与。
    sdsd995
        337
    sdsd995  
       10 小时 18 分钟前
    支持一下,参与试试
    rawburuser
        338
    rawburuser  
       10 小时 17 分钟前
    重在参与
    aswqazx
        339
    aswqazx  
       10 小时 15 分钟前
    +1
    alanoy
        340
    alanoy  
       10 小时 13 分钟前
    重在参与!
    wanwan
        341
    wanwan  
       10 小时 12 分钟前 via Android
    看看运气
    Mianmiss
        342
    Mianmiss  
       10 小时 12 分钟前
    +1 重在参与
    Mianmiss
        343
    Mianmiss  
       10 小时 11 分钟前
    参与下
    luo123qiu
        344
    luo123qiu  
       10 小时 11 分钟前
    分母+1
    iamperiod331www
        345
    iamperiod331www  
       10 小时 9 分钟前
    参与一下
    lin98
        346
    lin98  
       10 小时 8 分钟前
    试试
    fantasy55
        347
    fantasy55  
       10 小时 7 分钟前
    分子++
    kissing
        348
    kissing  
       10 小时 7 分钟前
    支持一下!
    a33291
        349
    a33291  
       10 小时 7 分钟前
    祝 op 大卖
    gongxuanzhang
        350
    gongxuanzhang  
       10 小时 5 分钟前
    今年运气还可以
    walkeronway
        351
    walkeronway  
       10 小时 3 分钟前
    支持支持
    boom520
        352
    boom520  
       10 小时 3 分钟前
    上次买过,味道 ok 的
    xing666
        353
    xing666  
       10 小时 0 分钟前
    重在参与
    Incarna
        354
    Incarna  
       10 小时前
    支持,要是中了的话觉得好吃给家人买点
    wlliam19
        355
    wlliam19  
       9 小时 57 分钟前
    想吃
    clieujv
        356
    clieujv  
       9 小时 56 分钟前
    我相信我能中
    wujinglun
        357
    wujinglun  
       9 小时 54 分钟前
    参与一下
    sumarker
        358
    sumarker  
       9 小时 53 分钟前
    分子
    jark006
        359
    jark006  
       9 小时 52 分钟前
    分母来了
    pegasusz
        360
    pegasusz  
       9 小时 48 分钟前
    反正中不了,拉低下中奖率吧
    bluelotus0739
        361
    bluelotus0739  
       9 小时 46 分钟前
    赣南脐橙真的很好吃!!!
    Jieyue
        362
    Jieyue  
       9 小时 46 分钟前
    分子
    njl12138
        363
    njl12138  
       9 小时 45 分钟前
    好家伙,第一次抽奖,我来试试
    qwereee
        364
    qwereee  
       9 小时 45 分钟前
    +1
    qingshengwen
        365
    qingshengwen  
       9 小时 44 分钟前
    分子+1
    BelovedOne
        366
    BelovedOne  
       9 小时 43 分钟前
    重在参与!
    ae86
        367
    ae86  
       9 小时 43 分钟前
    分母+1
    mrzhoudjq
        368
    mrzhoudjq  
       9 小时 41 分钟前
    参与一下
    yxb9511
        369
    yxb9511  
       9 小时 38 分钟前
    冲冲冲,每年都吃赣南脐橙
    purewhite0
        370
    purewhite0  
       9 小时 36 分钟前
    参与一下
    mxT52CRuqR6o5
        371
    mxT52CRuqR6o5  
       9 小时 36 分钟前
    分母
    waising
        372
    waising  
       9 小时 34 分钟前
    分母
    lipanzjzs1
        373
    lipanzjzs1  
       9 小时 29 分钟前
    分母来啦
    AmosWu
        374
    AmosWu  
       9 小时 29 分钟前
    +1
    veyron888
        375
    veyron888  
       9 小时 29 分钟前
    预祝大麦
    hallostr
        376
    hallostr  
       9 小时 27 分钟前
    重在参与,爱吃脐橙
    lddtech
        377
    lddtech  
       9 小时 26 分钟前
    分子
    jy02919061
        378
    jy02919061  
       9 小时 25 分钟前 via Android
    来了啦啦啦啦啦了
    ZX16815
        379
    ZX16815  
       9 小时 25 分钟前
    分子
    cubicoo
        380
    cubicoo  
       9 小时 24 分钟前 via Android
    参与一下
    CaptainAmerica
        381
    CaptainAmerica  
       9 小时 23 分钟前
    支持一下
    hahasong
        382
    hahasong  
       9 小时 18 分钟前
    我来看看能不能吃上
    Rekkles
        383
    Rekkles  
       9 小时 17 分钟前
    分子分母
    wulv
        384
    wulv  
       9 小时 17 分钟前
    参与一下
    richamon
        385
    richamon  
       9 小时 15 分钟前
    参与一下
    vaynecv
        386
    vaynecv  
       9 小时 12 分钟前
    分子
    NilError
        387
    NilError  
       9 小时 11 分钟前
    分母加一
    ddonano
        388
    ddonano  
       9 小时 11 分钟前
    参与一下
    yuxi521
        389
    yuxi521  
       9 小时 10 分钟前
    1111
    liuxiaojiu
        390
    liuxiaojiu  
       9 小时 8 分钟前
    试一下
    zzerd
        391
    zzerd  
    OP
       9 小时 8 分钟前
    @Feedmo https://gist.github.com/zzerding/d80d25149a74c0dd96516d949e9e52b7 看这兄弟,这有注释。晚上我有空用 V2EX api 重写 getAllUser
    yveJohn
        392
    yveJohn  
       9 小时 8 分钟前
    重在参与
    lvxing888
        393
    lvxing888  
       9 小时 5 分钟前
    支持一下
    luistrong
        394
    luistrong  
       9 小时 4 分钟前
    分子
    voya
        395
    voya  
       9 小时 3 分钟前
    生意兴隆
    Yafun
        396
    Yafun  
       9 小时 3 分钟前
    重在参与!!
    zhijietalk
        397
    zhijietalk  
       9 小时 0 分钟前
    试试
    zgsi
        398
    zgsi  
       8 小时 59 分钟前
    代码一言难尽
    norcm
        399
    norcm  
       8 小时 58 分钟前
    分子!~
    allendavis
        400
    allendavis  
       8 小时 53 分钟前
    拉低概率?
    1  2  3  4  5  6  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:14 · PVG 00:14 · LAX 08:14 · JFK 11:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.