【问题标题】:Twitter API v.1.1: How to prevent special commands (SMS) for POST statuses/update?Twitter API v.1.1:如何防止 POST 状态/更新的特殊命令 (SMS)?
【发布时间】:2013-11-14 14:26:17
【问题描述】:

我试图弄清楚如何允许在状态/更新期间发布special commandsAPI documentation 的统计数据表明,如果发布带有“D”、“M”的推文,它将在命令后向用户发送直接消息。

我尝试用“不间断空格”(%A0) 替换第一个字符。然而 twitter 将这些字符翻译成…。

我能想到的唯一其他选择是创建一个正则表达式,它会删除所有潜在危险的 SMS 代码。这并不理想,因为我更愿意保留原始推文。比如发推文:“D Day 是一部不错的电影。”将导致“白天是一部不错的电影。”

我也尝试在帖子前输入一个空格,但它被忽略了,仍然发送了直接消息。是否有某种转义字符或作弊让 twitter 忽略这些命令?

【问题讨论】:

    标签: twitter oauth escaping


    【解决方案1】:

    看来我找到了解决方案。有几个问题。第一个是我的百分比编码函数不接受 unicode 字符,所以 twitter 用 � 响应。为了解决这个问题,我在 VB.Net 中使用了以下代码:

    Regex.Replace(Uri.EscapeDataString(s), "[\!\*\'\(\)]", Function(m) Uri.HexEscape(Convert.ToChar(m.Value(0).ToString())))
    

    第二个问题是 twitter 对所有空白字符都一视同仁。因此,您不能作弊并使用诸如 u+00A0(无间断空格)之类的字符或以下所列的任何其他字符:

    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf (6.4) http://en.wikipedia.org/wiki/Whitespace_character

    幸运的是,Twitter 不包含 zero-width spaces 作为空白字符。如果使用零宽度空间,Twitter 实际上还允许通过 API 发布 141 个字符。这意味着您可以在 SMS 命令之后和空格之前添加 U+200B 以防止 SMS 命令运行。如:

    Dim s as String = "M" & ChrW(8203) & " Username 140 character tweet posted here as a test. This is actually 141 characters because of the zero-width space. But accepted anyway."
    

    希望这会有所帮助!

    更新:

    对于那些正在寻找正则表达式代码的人来说,这是一个 1 班轮:

    Regex.Replace(s, "^(ON|OFF|FOLLOW|F|UNFOLLOW|LEAVE|L|STOP|QUIT|END|CANCEL|UNSBSCRIBE|ARRET|D|M|RETWEET|RT|SET|WHOIS|W|GET|G|FAV|FAVE|FAVORITE|FAVORITE|\*|STATS|SUGGEST|SUG|S|WTF|HELP|INFO|AIDE|BLOCK|BLK|REPORT|REP)( )", Function(m) m.ToString.Replace(" ", ChrW(8203) & " "))
    

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2012-01-11
      • 2020-06-15
      • 2013-07-21
      相关资源
      最近更新 更多