V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Andy1999
V2EX  ›  分享创造

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

  •  
  •   Andy1999 · 2015-09-18 22:28:33 +08:00 via iPhone · 6664 次点击
    这是一个创建于 3386 天前的主题,其中的信息可能已经有所发展或是发生改变。
    半年前,我们团队 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  
       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  
       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.跳转到别人地址。。。
    MrGba2z
        38
    MrGba2z  
       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  
       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  
       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   ·   实用小工具   ·   3967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:57 · PVG 08:57 · LAX 16:57 · JFK 19:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.