如何使用Twitter API提取指定用户推文?附JavaScript代码
使用Twitter JSONP接口提取用户推文的实现分析与优化建议
你采用了JSONP跨域方案来调用Twitter的用户时间线接口,这种方式在早期前端跨域场景中非常实用。先把你的实现代码整理出来:
1. 调用Twitter API的脚本标签
<script src="http://twitter.com/statuses/user_timeline/DoucoureEt.json?callback=updateTweets"></script>
2. 处理推文的回调函数
function updateTweets(tweets) { var tweetSelection = document.getElementById("tweets"); for (var i = 0; i < tweets.length; i++) { tweet = tweets[i]; var option = document.createElement("option"); option.text = tweet.text; option.value = tweet.text.replace("\"", "'"); console.log("The option is: " + option); tweetSelection.options.add(option); } tweetsSelection.selectedIndex = 0; }
接下来我指出几个需要注意的问题和优化方向:
未声明的全局变量:循环里的
tweet没有使用var/let声明,会自动挂载到全局作用域,容易引发变量冲突。建议修改为:let tweet = tweets[i]; // ES6+ 写法 // 或者兼容旧环境的写法 var tweet = tweets[i];字符串替换不彻底:
replace("\"", "'")只会替换推文文本中的第一个双引号,要替换所有双引号的话,需要使用全局正则表达式:option.value = tweet.text.replace(/"/g, "'");变量名拼写错误:最后一行的
tweetsSelection是笔误,应该和前面声明的tweetSelection保持一致,否则会抛出Uncaught ReferenceError错误。API端点与协议问题:目前Twitter的旧版v1 API已经不再维护,原
http://twitter.com/statuses/user_timeline/端点可能已经失效,且现在所有Twitter API都强制要求HTTPS协议。如果需要继续使用,注意新版API需要OAuth认证,不再支持简单的JSONP调用。潜在XSS风险:直接将推文文本赋值给
option.text虽然浏览器会自动转义部分特殊字符,但为了更安全,建议对文本进行HTML转义处理:function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } // 使用时 option.text = escapeHtml(tweet.text);
内容的提问来源于stack exchange,提问作者Douk
相关产品推荐
相关产品推荐

