Tweepy Streaming API适配问题:跨设备推文识别异常排查
搞定你的Twitter机器人移动端兼容问题
嘿,我帮你捋清楚这个问题:桌面端测试一切正常,但用iPhone发推文不管格式对不对都触发错误回复,这100%是因为移动端和桌面端的引号格式不一样!
问题根源
你代码里的Quotation_Marks_Filter是检查普通直引号"和',但iPhone默认键盘输入的是智能弯引号——也就是“(左双引号)、”(右双引号)、‘(左单引号)、’(右单引号),这些字符和直引号的Unicode编码完全不同,你的过滤器根本识别不出来,自然会判定格式错误。
快速修复方案
1. 统一替换智能引号为直引号
在你的引号过滤函数开头,先把所有可能的智能引号替换成代码能识别的直引号,这样不管用户用什么设备输入,格式都能统一:
def Quotation_Marks_Filter(): print("Filtering quotation marks...", end=" ") # 关键步骤:把各种智能引号替换成标准直引号 tweet_normalized = tweet.replace("“", '"').replace("”", '"') \ .replace("‘", "'").replace("’", "'") # 之后所有判断都用处理后的tweet_normalized,而不是原始tweet if '"' in tweet_normalized or "'" in tweet_normalized: double_quote_count = tweet_normalized.count('"') single_quote_count = tweet_normalized.count("'") # 下面保留你原来的逻辑,只是把所有tweet替换成tweet_normalized # ... 你的原有判断代码 ...
2. 调试验证(可选但推荐)
如果想确认是不是这个问题,可以在Quote_Filter里输出推文的原始字符编码,看看移动端发来的是不是智能引号:
def Quote_Filter(): # 输出每个字符的Unicode编码,直引号是34,智能左双引号是8220,右是8221 print("RAW TWEET CHARACTER CODES:", [ord(char) for char in tweet]) print("INCOMING TWEET: " + " > " + str(tweet) + " < " + " FROM: @" + str(tweet_data.get('user', '').get('screen_name', '')) + "/" + tweet_data.get('user', '').get('name', ''))
3. 扩展兼容性(可选)
要是担心用户用其他类型的引号(比如中文的「」),可以继续扩展替换规则:
tweet_normalized = tweet.replace("“", '"').replace("”", '"') \ .replace("‘", "'").replace("’", "'") \ .replace("「", '"').replace("」", '"')
小提醒
你的代码最后一行quote_chars.appen看起来是打错了,应该是quote_chars.append,记得补全这部分,避免运行时抛出错误哦~
内容的提问来源于stack exchange,提问作者BulletInAction
相关产品推荐
相关产品推荐

