Twitter API - no encoding

Twitter API - no encoding

本文关键字:encoding no API Twitter      更新时间:2023-12-05

我目前正在为大学做一个项目。我们正在尝试使用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);
    }); 

});*/

}

您的方法有缺陷。

  • jQuery为您完成所有的参数编码。不要干涉,只需传递一个包含键和值的对象。不要从字符串的各个部分构建URL
  • 重要的安全考虑:不要构建接受任何任意URL的服务器端代理脚本。这样做简直太愚蠢了
  • 相反,更改PHP脚本以接受一组operation谓词,如"search",这些谓词与服务器端的正确URL硬连接
  • 我建议使用$.get()$.post()而不是$.ajax(),以获得更干净的代码
  • 此外,使用$.each()而不是常规的for循环。生成的代码将更加清晰易读
  • 避免从字符串中构建HTML。尤其是如果字符串的部分来自一个完全不可信的来源,比如Twitter。使用jQuery的功能和DOM来安全地构建HTML。(如果你不确定我为什么提到XSS漏洞,请阅读相关内容)

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

$.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");
            });
        });
    });
});