【问题标题】:Twitter API - no encodingTwitter API - 无编码
【发布时间】:2013-11-28 12:45:37
【问题描述】:

我目前正在为大学做一个项目。我们正在尝试使用 twitter api,但查询时遇到了一些问题。我想搜索一个完整的字符串,因此我需要将我的字符串放在引号中。(比如“我正在寻找整个刺痛”) 问题是我用来从 twitter 获取数组的命令以某种方式对整个字符串进行了编码,但我需要不对引号进行编码。我希望你们能理解我的问题。另外我会发布我的js代码。

JS 代码:首先我尝试了一个 json 命令,但它没有用。之后我尝试了ajax,但我遇到了同样的问题。当我在查询中使用引号时没有得到响应。

$( document ).ready(function() 
{
console.log("ready");

// div mit id unique1 - bei klick mache onClick1
$('a#unique1').bind('click', onClick1);
});


function onClick1(elem)
{
var inputString = $("#SearchInput").val();
var EncodedString = encodeURI(inputString);

console.log('test' +  inputString); 

var endNode = 'search/tweets.json?q=hate%20' + EncodedString + '&result_type=mixed&count=200';


/*
$.getJSON('twitter/twitter-proxy.php?url='+encodeURIComponent(endNode), 
*/

$.ajax({
            type: "GET",
            url: 'twitter/twitter-proxy.php?url='+encodeURIComponent(endNode),
            data: " ",
            success: function(twitterResponse){

                var respStr = "start";


                console.log(twitterResponse);
                console.log(twitterResponse.statuses);

                for(var i = 0; i < twitterResponse.statuses.length; i++)
                {
                    $('.container .apiCall ol').append('<li>'+ twitterResponse.statuses[i].created_at + '</br>' + twitterResponse.statuses[i].text.toLowerCase() + '</li>');

                    respStr = respStr + twitterResponse.statuses[i].created_at + twitterResponse.statuses[i].text.toLowerCase();


                } 

            }           

});

/*
function(twitterResponse)
{
    var respStr = "start";


    console.log(twitterResponse);
    console.log(twitterResponse.statuses);

    for(var i = 0; i < twitterResponse.statuses.length; i++)
    {
        $('.container .apiCall ol').append('<li>'+ twitterResponse.statuses[i].created_at + '</br>' + twitterResponse.statuses[i].text.toLowerCase() + '</li>');

        respStr = respStr + twitterResponse.statuses[i].created_at + twitterResponse.statuses[i].text.toLowerCase();


    }
    */


    /*

    // respSgtr = "  ";

    // write tweets to file          
    $.post("writer.php", { fileString:respStr},
    function(response) 
    {
    //alert("Data Loaded: " + data);
    }); 



});*/

}

【问题讨论】:

    标签: javascript ajax json api encoding


    【解决方案1】:

    你的方法有缺陷。

    • jQuery 为您完成所有参数编码。不要干涉,只需传递一个包含键和值的对象。不要从字符串的单个位构建 URL。
    • 重要的安全注意事项:不要构建接受任意 URL 的服务器端代理脚本。这样做很愚蠢。
    • 改为将您的 PHP 脚本更改为接受一组 operation 动词,例如 "search",这些动词硬连接到服务器端的正确 URL。
    • 我建议使用$.get()$.post() 而不是$.ajax(),以使代码更简洁。
    • 此外,使用$.each() 而不是常规的for 循环。生成的代码将更清晰、更易于阅读。
    • 避免从字符串位构建 HTML。特别是如果字符串位来自完全不可信的来源,比如 Twitter。使用 jQuery 的功能和 DOM 安全地构建 HTML。 (如果您不确定我为什么提出这个问题,请阅读 XSS 漏洞)

    建议的解决方案(appendText() jQuery 插件取自here):

    $.fn.appendText = function(text) {
        return this.each(function() {
            var textNode = document.createTextNode(text);
            $(this).append(textNode);
        });
    };
    
    $(function () {
        $('a#unique1').on('click', function (event) {
            $.get('twitter/twitter-proxy.php', {
                operation: 'search',
                params: {
                    q: 'hate ' + $("#SearchInput").val(),
                    result_type: 'mixed',
                    count: 200
                }
            }).done(function (twitterResponse) {
                $.each(twitterResponse.statuses, function (index, status) {
                    $("<li>")
                        .appendText(status.created_at)
                        .append("<br>")
                        .appendText(status.text.toLowerCase())
                        .appendTo(".container .apiCall ol");
                });
            });
        });
    });
    

    【讨论】:

    • 我实际上是在搜索短语。 twitter api 论坛中有一个错误报告,但它来自 2 年前。希望这能更详细地解释我的问题。 dev.twitter.com/discussions/1114
    • 好的,但这是 Twitter API 问题(如果有的话),而不是 URL 编码、Ajax 或 jQuery 问题。我的回答仅限于客户端。 Twitter 本身如何期望或处理搜索请求我不能说。
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 2014-12-23
    • 2015-01-19
    • 2018-01-24
    • 1970-01-01
    • 2012-01-06
    • 2014-09-03
    • 2012-01-14
    相关资源
    最近更新 更多