Twitter4j引用推文问题:用户文本期望占满280字符遇长度计算异常
嘿,我明白你的困扰——想把自定义文本写满280字符,结果加了引用推文的URL后,检测长度时URL直接占了23个字符,感觉“亏”了不少空间对吧?
先给你理清楚核心原因:这不是twitter-text库的问题,而是Twitter官方的长度计算规则——所有HTTP/HTTPS格式的URL,不管原链接多长,都会被统一计为23个字符。这是因为Twitter会自动把所有外部URL转成t.co的短链接,而t.co链接的标准长度就是23字符,所以twitter-text库是严格按照这个规则来计算的。
那怎么才能最大化利用280字符的配额呢?给你几个实用方案:
1. 精准计算自定义文本的可用长度
总配额280字符,减去URL占用的23字符,你的自定义文本最多可以写 280 - 23 = 257 个字符(别忘了算上URL前后的空格哦,比如你要在文本和URL之间加个空格,那还要多减1个字符)。
用twitter-text验证的话,可以这么写代码:
import com.twitter.twittertext.TwitterTextParser; public class TweetLengthChecker { public static void main(String[] args) { String myText = "Wow! This is cool! "; String quoteLink = "https://twitter.com/edent/status/554772317738659840"; String fullTweet = myText + quoteLink; TwitterTextParser.ParseResult result = TwitterTextParser.parseTweet(fullTweet); System.out.println("当前推文总长度:" + result.weightedLength); System.out.println("还能加多少字符:" + (280 - result.weightedLength)); } }
这段代码会准确算出包含URL的推文总长度,其中URL部分会被自动按23字符计算。
2. 避开重复计算的坑
别自己去缩短URL再放进去!比如你用别的短链接工具把原推文链接缩成更短的,twitter-text还是会把它算作23字符,反而白白浪费自定义文本的空间,完全没必要。另外,如果推文中有多个URL,每个都会占23字符,这个要注意。
3. 和Twitter4J配合发送的正确姿势
用Twitter4J发推文的时候,你不用手动处理URL,它会自动把链接转成t.co短链接。你只需要提前用twitter-text验证好总长度不超280就行,示例代码:
import twitter4j.Twitter; import twitter4j.TwitterFactory; import twitter4j.StatusUpdate; import com.twitter.twittertext.TwitterTextParser; public class TweetSender { public static void main(String[] args) throws Exception { Twitter twitter = TwitterFactory.getSingleton(); // 自定义文本控制在256字符(加1个空格+23字符的URL,刚好280) String myText = "这里是你想写的自定义内容,注意控制长度哦,算上空格最多256个字符就好"; String quoteLink = "https://twitter.com/edent/status/554772317738659840"; String fullTweet = myText + " " + quoteLink; // 先做长度验证 TwitterTextParser.ParseResult result = TwitterTextParser.parseTweet(fullTweet); if (result.weightedLength > 280) { System.out.println("推文太长啦,得把自定义文本改短点~"); return; } // 发送推文 StatusUpdate status = new StatusUpdate(fullTweet); twitter.updateStatus(status); System.out.println("推文发出去啦!"); } }
最后再强调下:如果你真的想让自定义文本占满280字符,那只能放弃加引用URL,只要有URL,就一定会被占23字符的配额,这是Twitter的硬规则哦。
内容的提问来源于stack exchange,提问作者kolombo

