大家还记得半年前的 wwurl 么,现在已经完成了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Andy1999
V2EX    分享创造

大家还记得半年前的 wwurl 么,现在已经完成了

  •  
  •   Andy1999 2015-09-18 22:28:33 +08:00 via iPhone 7236 次点击
    这是一个创建于 3733 天前的主题,其中的信息可能已经有所发展或是发生改变。
    半年前,我们团队 6 个人要打造一个新的短链服务。然而半年之中,离去的离去,弃坑的弃坑,留下一个半残品。
    最近正好有空,就基于 PHP 写了款很简单的短链,欢迎大家来指出 bug 。
    PHP+MySQL+Nginx
    http://qaq.cat
    未来会加入更多域名的支持
    例如输入长链接,随机返回短链而不是现在单一的 QAQ.cat
    未来也会更加人性化自动补齐 http ,而不需要手动输入
    未来很美好,愿我还能看到
    74 条回复    2015-09-21 11:33:01 +08:00
    vpncup
        1
    vpncup  
       2015-09-18 22:33:00 +08:00 via iPhone
    喵 @@@@@
    yexm0
        2
    yexm0  
       2015-09-18 22:34:46 +08:00
    现在的高中生都那么厉害了么.....
    cevincheung
        3
    cevincheung  
       2015-09-18 22:35:15 +08:00
    cevincheung
        4
    cevincheung  
       2015-09-18 22:35:41 +08:00
    icreeper
        5
    icreeper  
       2015-09-18 22:36:56 +08:00
    我之前无聊弄了个 http://qwq.pw 现在已经基本被我外坏了 233
    Andy1999
        6
    Andy1999  
    OP
       2015-09-18 22:37:02 +08:00 via iPhone
    @cevincheung 正则写错了,等下改
    nowbear
        7
    nowbear  
       2015-09-18 22:39:18 +08:00
    404
    qiayue
        8
    qiayue  
    PRO
       2015-09-18 22:41:15 +08:00
    loveyu
        9
    loveyu  
       2015-09-18 22:52:41 +08:00
    http://qaq.cat/2B
    这个有点巧啊
    raincious
        10
    raincious  
       2015-09-18 22:55:12 +08:00   1
    一次 Click 一次请求。楼主,请问你要尝试下我的这个库么?可以用`Block`模式来阻止用户通过 Click 的方式重复提交无效内容,直到 Callback 运行结束。

    https://github.com/raincious/jQueue

    npm install jqu

    https://www.npmjs.com/package/jqu
    Andy1999
        11
    Andy1999  
    OP
       2015-09-18 22:57:03 +08:00 via iPhone
    @cevincheung
    @nowbear
    @loveyu Fix

    @raincious 玩不太来,代码都不是很严谨,谢谢您
    matsuijurina
        12
    matsuijurina  
       2015-09-18 22:57:38 +08:00 via Android
    记得是全中学妹子团队做的,终于完成了吗
    Andy1999
        13
    Andy1999  
    OP
       2015-09-18 22:59:27 +08:00 via iPhone
    @matsuijurina 不完全是,比如说我,就是被强加的。
    目前还有一个活着,其余全部走了(开学)
    raincious
        14
    raincious  
       2015-09-18 23:08:08 +08:00
    @Andy1999

    没事哈。也有个一句话的解决方案,就是类似于:

    var clickTimeout = null;

    if (clickTimeout ) {
    clearTimeout (clickTimeout );
    }

    clickTimeout = setTimeout (function () { }, <Time in ms>);

    这样的。
    eary
        15
    eary  
       2015-09-18 23:08:44 +08:00
    wow,厉害啊。未成年吧? 还不能够工作啊。
    airyland
        16
    airyland  
       2015-09-18 23:11:57 +08:00
    当我不重新输入地址而是一直 enter 的时候。。不停生成短链,然后就重定向循环了。
    xfspace
        17
    xfspace  
       2015-09-18 23:16:59 +08:00 via Android
    检查下证书链? android4.4.4 chrome 提示~而且查看也没看到 Gandi 的信息,就 qaq.cat
    twor2
        18
    twor2  
       2015-09-18 23:18:03 +08:00
    twor2
        19
    twor2  
       2015-09-18 23:19:00 +08:00
    @loveyu 天明所在
    slixurd
        20
    slixurd  
       2015-09-18 23:20:30 +08:00
    循环重定向,插入的时候注意查重
    leavic
        21
    leavic  
       2015-09-18 23:22:13 +08:00
    域名太长,出售 nat.pw :)
    Andy1999
        22
    Andy1999  
    OP
       2015-09-18 23:24:12 +08:00 via iPhone
    @eary 对 未成年
    @airyland 然而设计的时候没有考虑到攻击
    再说了任何防御都是防君子防不住小人,要打我这垃圾服务器秒死
    @xfspace 感谢,稍后检查
    @leavic 我们的 k.ky 被收回了,不然肯定用那个
    @slixurd 已经准备干掉部分域名
    leavic
        23
    leavic  
       2015-09-18 23:28:24 +08:00
    @Andy1999 原来还有.ky 域名呢,看来我不知道的域名真是太多了。
    airyland
        24
    airyland  
       2015-09-18 23:28:27 +08:00
    @Andy1999 说小人太严重了,将短链直接显示在输入框里明显容易发生误操作再次生成短链。
    Andy1999
        25
    Andy1999  
    OP
       2015-09-18 23:35:40 +08:00 via iPhone
    @airyland 今天刚上线就被刷了:D 已经刷到 http://qaq.cat/3I 了,这样子的话,您算算被 post 了多少次我也算不太来,至少上百了吧,后台一看,基本都是 qaq.cat->qaq.cat 这类毫无疑义的玩意
    Andy1999
        26
    Andy1999  
    OP
       2015-09-18 23:36:01 +08:00 via iPhone
    sciooga
        27
    sciooga  
       2015-09-18 23:59:14 +08:00
    原来不会自动补上 http 的啊 ...
    摇到了一个这个: http://qaq.cat/3Q
    abelyao
        28
    abelyao  
       2015-09-19 00:06:25 +08:00
    楼主的 .cat 注册一年多少钱?
    Tink
        29
    Tink  
    PRO
       2015-09-19 00:15:40 +08:00
    我之前自己也写了一个 php 的缩址服务,但是没有用到数据库,全部在文件里存着,改天也贴上来
    Andy1999
        30
    Andy1999  
    OP
       2015-09-19 00:20:57 +08:00 via iPhone
    @abelyao Gandi 68/年
    WhyLiam
        31
    WhyLiam  
       2015-09-19 00:56:38 +08:00
    http://qaq.cat/4t 不能短域名太多层
    Andy1999
        32
    Andy1999  
    OP
       2015-09-19 01:08:52 +08:00 via iPhone
    @WhyLiam 请遵守中国法律法规
    abelyao
        33
    abelyao  
       2015-09-19 01:09:08 +08:00 via iPhone
    @Andy1999 啥! cat 这么便宜吗! RMB 还是美刀啊?
    abelyao
        34
    abelyao  
       2015-09-19 01:09:48 +08:00 via iPhone
    @Andy1999 话说注册 cat 需要什么特别资料吗?
    c742435
        35
    c742435  
       2015-09-19 01:41:22 +08:00
    只有我对妹子好奇吗。。。。求妹子图……
    jsthon
        36
    jsthon  
       2015-09-19 01:50:56 +08:00 via Android
    Android Chrome 不信任证书
    manhere
        37
    manhere  
       2015-09-19 03:28:21 +08:00
    1.循环生成
    2.跳转到别人地址。。。
    v2gba
        38
    v2gba  
       2015-09-19 03:50:14 +08:00
    卧槽。。。。。。。坑爹啊

    我输入了一个 Google maps 的 URL
    然后点了一下 变成了 http://qaq.cat/4N
    这里还是对的

    继续点击,
    看生成的 URL 感觉看了一会儿有重复的

    随便选了个打开。。。。。。
    先是提示 redirect

    然后突然就跳到草榴了。。

    我在上班啊!
    还好美国同事不认识草榴
    jedyu
        39
    jedyu  
       2015-09-19 09:22:55 +08:00
    http://qaq.cat/50

    自动补齐 http 很有必要
    jump2cn
        40
    jump2cn  
       2015-09-19 09:30:35 +08:00
    竟然是顺序编号,这样好吗....
    Andy1999
        41
    Andy1999  
    OP
       2015-09-19 09:30:57 +08:00 via iPhone
    @abelyao 你得会加泰罗尼亚语言
    @MrGba2z 目前没有域名黑名单,这些域名都是可以添加的,下版本会用 WAF 直接拦掉
    edire
        42
    edire  
       2015-09-19 10:12:48 +08:00
    为什么 一天就做完了呢。。。
    BigDecimal
        43
    BigDecimal  
       2015-09-19 11:32:44 +08:00
    将 form 放在 body 和 head 之间是什么黑科技?
    qiuai
        44
    qiuai  
    PRO
       2015-09-19 11:38:19 +08:00
    一直点就一直加密 qaq.cat.....为什么不做下判断呢.何必去短链接一个短链接呢...
    sox
        45
    sox  
       2015-09-19 11:40:59 +08:00 via Android
    短链服务这么多,你这域名做这个真是浪费啊。
    Daddy
        46
    Daddy  
       2015-09-19 11:58:34 +08:00
    @abelyao 不需要证明,但这后缀特别要求是使用加泰罗尼亚语言,巴赛罗那闹独立的那个地方语言,这个后缀也是应这方面的需求的,将他们视为独立的一员。 不过似乎没有什么,大概就像.us 后缀一样,会很宽松。除非被举报了。
    Andy1999
        47
    Andy1999  
    OP
       2015-09-19 12:44:12 +08:00 via iPhone
    @Daddy 6 个月内要求发布一个加泰罗尼亚语言网站, Gandi 说的啦~
    wanliang1221
        48
    wanliang1221  
       2015-09-19 13:56:12 +08:00
    高中生厉害!
    KillPaul
        49
    KillPaul  
       2015-09-19 17:00:36 +08:00
    我觉得吧... "Type the URL what you want to short there." 这句话貌似不符合语法规范...
    1. what 这个词肯定不对,我虽然语法说不出来,但是我觉得应该删掉这个 what ,或者是换成 that ?求英语高手解答。
    2. short 貌似要改成 shorten 。
    3. there 应该改成 here 更好一点。
    abelyao
        50
    abelyao  
       2015-09-19 17:58:29 +08:00
    @Daddy 是只要有一个页面使用了 加泰罗尼亚语 就好了呢?还是要求整个网站使用这个语言?他们怎么检查呢? @Andy1999 你是咋处理的?
    Daddy
        51
    Daddy  
       2015-09-19 19:21:28 +08:00
    @abelyao @Andy1999 .us 也一样写着必须美国人或四种与美国有关联的个人、组织才能申请,但根本没屁事。 我一个已过期.cat 就挂了个中文网页差不多一年了, Whois 邮箱没收到过一次这方面的邮件。 应该说,估计跟.us 一样,除非有人刻意举报,否则也只会是个摆设。
    顺便说个,.cat 这两年新注册都有优惠,上次看到还是 6.5 刀的,不过续费不便宜, 30 刀水平的。
    Andy1999
        52
    Andy1999  
    OP
       2015-09-19 19:25:30 +08:00
    @abelyao 我理都没理他。。。
    abelyao
        53
    abelyao  
       2015-09-19 20:01:33 +08:00 via iPhone
    @Daddy @Andy1999 谢谢两位,几年前就很喜欢 cat 的域名了,但之前门槛太高,现在可以弄一个了。噢耶
    hzlzh
        54
    hzlzh  
    PRO
       2015-09-19 20:05:31 +08:00
    不错, flat-ui
    LancerComet
        55
    LancerComet  
       2015-09-19 20:55:49 +08:00
    手机端友好,不错。抢到了 80
    Daddy
        56
    Daddy  
       2015-09-19 22:10:23 +08:00
    @abelyao 哈哈,你要是不放心,那就在页脚特意用加泰罗尼亚语言写个短句支持他们的独立运动, 2333
    我猜是这样的,当初向 ICANN 申请这个后缀的时候,就是为他们的独立运动发声,可普通理由不够说服力,就将这条件作为了申请理由加分,强调申请这后缀不是多此一举,而是要强化他们的运动。 结果呢,.ca 已存在,加了个字母变成受欢迎的 .cat ,要是真限制的就挣不到钱,可他们的运动又需要钱,只好如此了。毕竟加泰罗尼亚语言不是一个行将灭绝受保护的小语言,而是多个国家和地区的官方语言,只是为了强调他们的独立性
    GPU
        57
    GPU  
       2015-09-19 22:34:41 +08:00
    @raincious 你西,是不是一次之後,如果结果没有返回过来的话 ,再次点击就会忽略?
    GPU
        58
    GPU  
       2015-09-19 22:38:39 +08:00
    为什么乱跳的?
    raincious
        59
    raincious  
       2015-09-19 22:40:12 +08:00
    @GPU

    是啊。

    如果有不会返回的可能,请用`Alter`模式然后配合 Delay 时间设置。
    GPU
        60
    GPU  
       2015-09-19 22:41:55 +08:00
    @raincious 貌似不错的样子哦 , 明天添加到我的 开门程序去 。

    现在我的程序也是, 如果狂按按钮。 python 的 UART 就处理不过来直接返回 500 了。
    em70
        61
    em70  
       2015-09-19 22:44:18 +08:00
    不加 http://就不行
    raincious
        62
    raincious  
       2015-09-19 23:32:24 +08:00
    @GPU

    哦,如果这样的话,得注意:你如果用`Alter`模式,用户在之前一个 Delay 周期结束之后再次点击按钮就可以继续提交了。而如果这期间你前面的 Callback 没有返回,那么那些之前的 Callback 是会被忽略掉的。

    这样的话,如果 Callback 1 返回了一个成功的结果,而其后的 Callback 2 返回了一个失败的结果,那么这个模块会最终呼叫那个返回失败结果的 Callback 。

    另外还要注意这个模块其实是用 setInterval 实现的。意味着如果你设定的 1 秒的 Delay ,那么用户按完按钮 1 秒以后你的 run 调用才会被执行。

    如果你真要设定一秒那么长的超时的话,或许得给用户一个 Loading.gif 什么的假装服务器在处理。

    请参考下具体代码来确定这个模块是否符合你的要求:

    你或许会想看:`run`的实现:
    https://github.com/raincious/jQueue/blob/master/src/jqu.js#L160

    以及队列的运行方式:
    https://github.com/raincious/jQueue/blob/master/src/jqu.js#L51

    ==========================

    另外,你的需求为啥会导致 Callback 不叫?是服务器没有响应么?但如果你用了 jQuery 之类,它的 Ajax 里有个 timeout 设定的吧,除此之外基本上我想不出有啥会导致 Callback 不会呼叫的了(其实我不是前端……)。

    要不你试试看用`Block`模式,然后$.ajax 带着超时限制去请求试试?
    GPU
        63
    GPU  
       2015-09-20 00:27:12 +08:00
    @raincious 你最后说的“ Callback 不叫” 不是太懂。

    你应该是说为什么没有响应把? UART 是发了一个指令去蓝牙让单片机处理之后返回 1 或者 0 。

    但是 过程中,蓝牙模块没有反映得这么快 ,所以如果有时候按了一次感觉没反应的话,就会狂按 。

    结着 UART 模块就傻逼了, 不知道怎么处理就直接 500 出来了。

    我也打算是点击按钮之后 ,显示一个 loading 的按钮。

    但是 , 还没有了解过有没方法可以检测到只要一接收到结果,就恢复 按钮的使用


    ======

    你发的哪两个链接我还看不懂呢 。

    jquery 我也只是现学现用 ,懂一点皮毛呢
    kslr
        64
    kslr  
       2015-09-20 10:48:44 +08:00
    @GPU 你是怎么发请求的? ajax 不是有回调吗
    GPU
        65
    GPU  
       2015-09-20 11:17:52 +08:00
    @kslr 就是用 ajax , 是有回调 。但是如果结果还没有返回 ,再点按钮他回来会再发送一个 POST

    https://gist.github.com/p0we7/c390f6c992e0a52ca955
    raincious
        66
    raincious  
       2015-09-20 11:42:39 +08:00
    @GPU

    那么如果只是这样一个小功能,你可以在点完按钮之后 Disable 那个按钮,然后 success 、 error 、 always 几个 Callback 里让按钮 Re-enable 。

    具体就是 `function POST (args ) {` 前面加上 `$('#Open').attr ('disabled', 'disabled');`

    然后`success`、`error`,`always`这些回调里加上 `$('#Open').attr ('disabled', '');`

    这样用户前端就不能再点击那个按钮了(如果它是个 HTML 按钮的话)。

    如果你是自定义了一个其他 DOM 的按钮(比如拿图片做了个),可以在 `jQuery (document ).ready (function () {` 里设定一个变量(比如 var post_disabled ),然后通过判断这个变量来做类似的操作。
    GPU
        67
    GPU  
       2015-09-20 11:51:12 +08:00
    @raincious 我用的是 bootstrap ,这样子 Disable 也不错 ,我再去看看怎么添加一个 loading 图标
    GPU
        68
    GPU  
       2015-09-20 11:54:11 +08:00
    @raincious 我还发现一个问题啊 , 我刚刚试了一下你给的哪个 disable , 就是他是 disable 状态 ,但是继续点按钮还是会 post 数据,这个该怎么破
    raincious
        69
    raincious  
       2015-09-20 12:04:24 +08:00
    @GPU 其实……

    你可以用<button>标签做按钮,就像比如:

    <button type="button">
    <i id="button-icon"></i>
    Submit
    </button>

    然后,通过 jQuery 来改那个 `#button-icon` 的 class 。

    See also: https://fortawesome.github.io/Font-Awesome/examples/#animated
    raincious
        70
    raincious  
       2015-09-20 12:17:07 +08:00
    @GPU

    那我就是记错了,不过你可以试试看这样:
    https://jsfiddle.net/33zz9njz/1/
    GPU
        71
    GPU  
       2015-09-20 13:14:47 +08:00
    @raincious

    我一直都是用的 button , 用你给的那个 disable 使用了之后 ,虽然按钮是已经禁用了(灰色) .

    而且鼠标放上去也是变成的红色圈禁止的符号,但是继续按它还是会 POST 数据出去 .

    然而我有两个 按钮 ,一个 Open 一个 Close 的 . Close 的就不会 ,Open 的就会.不知道什么情况
    raincious
        72
    raincious  
       2015-09-20 19:26:07 +08:00
    @GPU

    或许你需要提供更多的代码,这样才能进行测试。
    GPU
        73
    GPU  
       2015-09-20 22:12:38 +08:00
    @raincious

    已经搞掂咯 .本身只想弄一个简单的点击之后禁用 ...

    然后又找到了一个可以显示加载中动画的插件 然后添加了进去 ,默认就带有 加载中禁用的功能 .


    谢谢啦 .
    DeltaC
        74
    DeltaC  
       2015-09-21 11:33:01 +08:00
    QAQA 。兹次。楼主的 jp 的 pac 好像挂了吧,请问是吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5588 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 03:21 PVG 11:21 LAX 19:21 JFK 22:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86