Javascript 从twitterapiv1.1切换到twitterapiv2,将推文从个人资料发送到googlesheets
我用于从API V1.1收集推文的模型如下:Javascript 从twitterapiv1.1切换到twitterapiv2,将推文从个人资料发送到googlesheets,javascript,google-apps-script,google-sheets,twitter,Javascript,Google Apps Script,Google Sheets,Twitter,我用于从API V1.1收集推文的模型如下: function Twitter_get_tweets() { var string_Screen_name = "stakehighroller"; var string_Consumer_key = "AAAAAAAAAAAAAAAAAAAAAAAAAA"; var string_Consumer_secret = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
function Twitter_get_tweets()
{
var string_Screen_name = "stakehighroller";
var string_Consumer_key = "AAAAAAAAAAAAAAAAAAAAAAAAAA";
var string_Consumer_secret = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
var spreadsheet_Tweets = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tweets");
spreadsheet_Tweets.getRange(3, 1, 2600, 20).clearContent();
var tokenUrl = "https://api.twitter.com/oauth2/token";
var tokenCredential = Utilities.base64EncodeWebSafe(string_Consumer_key + ":" + string_Consumer_secret);
var tokenOptions = {
headers : {
Authorization: "Basic " + tokenCredential,
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
},
method: "post",
payload: "grant_type=client_credentials"
};
var responseToken = UrlFetchApp.fetch(tokenUrl, tokenOptions);
var parsedToken = JSON.parse(responseToken);
var token = parsedToken.access_token;
var apiUrl = "";
var responseApi = "";
var apiOptions = {
headers : {
Authorization: 'Bearer ' + token
},
"method" : "get"
};
var array_Column_a = [];
var array_Text = [];
var array_Expanded_url = [];
var string_Max_id = 0;
var int_Line_counter = 1;
var int_Break_loop = 0;
do
{
if (int_Line_counter == 1)
{
apiUrl = 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='+ string_Screen_name + '&count=200&include_rts=1';
}
else
{
apiUrl = 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='+ string_Screen_name + '&count=200&include_rts=1&max_id=' + string_Max_id;
}
responseApi = UrlFetchApp.fetch(apiUrl, apiOptions);
if (responseApi.getResponseCode() == 200)
{
var obj_data = JSON.parse(responseApi.getContentText());
for (var int_i = 0; int_i < obj_data.length; int_i++)
{
array_Column_a.push([int_Line_counter]);
array_Text.push([obj_data[int_i].text]);
if (obj_data[int_i].entities.urls[0] != undefined && obj_data[int_i].entities != undefined)
{
array_Expanded_url.push([obj_data[int_i].entities.urls[0].expanded_url]);
}
else
{
array_Expanded_url.push([""]);
}
int_Line_counter++;
}
if (obj_data[(obj_data.length-1)] != undefined && int_i < parseInt(obj_data[0].user.statuses_count))
{
string_Max_id = obj_data[(obj_data.length-1)].id;
}
else
{
int_Break_loop = 1;
}
}
}while (int_Break_loop != 1 && int_Line_counter < 1000)
if (array_Column_a.length > 0)
{
spreadsheet_Tweets.getRange("A3:A"+(array_Column_a.length + 2)).setValues(array_Column_a);
spreadsheet_Tweets.getRange("C3:C"+(array_Text.length + 2)).setValues(array_Text);
spreadsheet_Tweets.getRange("D3:D"+(array_Expanded_url.length + 2)).setValues(array_Expanded_url);
}
else
{
Browser.msgBox("0 Tweets found");
}
}
但是,当尝试将电子表格每行的收集值与每条tweet的相应值分开时,不会向电子表格发送任何内容。未对该区域进行分析:
for (var int_i = 0; int_i < obj_data.length; int_i++)
{
array_Column_a.push([int_Line_counter]);
array_Text.push([obj_data.data[int_i].text]);
if (obj_data.data[int_i].entities.urls[0] != undefined && obj_data.data[int_i].entities != undefined)
{
array_Expanded_url.push([obj_data.data[int_i].entities.urls[0].expanded_url]);
}
else
{
array_Expanded_url.push([""]);
}
int_Line_counter++;
}
我试着用
for (var int_i = 0; int_i < obj_data.length; int_i++)
{
array_Column_a.push([int_Line_counter]);
array_Text.push([obj_data.data[int_i].text]);
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tweets").getRange("A3").setValue("Test");
return;
for(var int_i=0;int_i
要知道是否正在分析insidefor
,但这不是因为单元格中没有任何值,所以我分析inside for脚本没有工作
我需要做些什么才能避免这种情况发生,并在中为实际创建循环,并能够发送推文列表?理论上收集数据的方法是正确的,因为通过测试,它们提供了准确的值
链接:
API V1.1:
API V2:
我强调,在API V1.1中,数据的传输非常完美。
V1.1试验结果:
响应的结构不同,您需要为您的v2实际修改一些
更新循环条件
修改:
- v2中的
obj_数据
包含额外的meta
,因此您需要获取obj_数据的长度。数据
而不仅仅是obj_数据
生成的代码段:
if(responseApi.getResponseCode()==200){
var obj_data=JSON.parse(responseApi.getContentText());
对于(var int_i=0;int_i
输出:
条目79,无实体。url
响应的结构不同,您需要为您的v2实际修改一些
更新循环条件
修改:
- v2中的
obj_数据
包含额外的meta
,因此您需要获取obj_数据的长度。数据
而不仅仅是obj_数据
生成的代码段:
if(responseApi.getResponseCode()==200){
var obj_data=JSON.parse(responseApi.getContentText());
对于(var int_i=0;int_i
输出:
条目79,无实体。url
在访问API之前,仍在等待twitter审查应用程序,这可能需要一段时间。同时,您能否提供响应而不是v1.1和v2,以便其他无法访问API的人更容易测试您的代码?Hi@ASyntuBU提前感谢,复制响应的唯一问题是nse是因为该值太大,我无法将完整值发送到电子表格和Logger.log(obj_数据)中的单元格
完整的响应没有出现,它只显示了一个用…
完成的部分,我想通过发布帮助,但我不知道如何收集这个值。@ASyntuBU我可以批准使用API访问数据访问原始脚本,我使用该帐户进行测试,这是一个严肃的社区,我看不到如果有人希望帮助解决我的问题,那么在批准通过电子邮件访问时会出现任何问题。在访问API之前,仍在等待twitter审查应用程序,这可能需要一段时间。同时,您能否提供响应而不是v1.1和v2,以便其他无法访问API的人更容易进行测试您的代码?Hi@ASyntuBU提前感谢,复制响应的唯一问题是值太大,我无法将完整值发送到电子表格和Logger.log(obj_数据)中的单元格
完整的响应没有出现,它只显示了一个用…
完成的部分,我想通过发布帮助,但我不知道如何收集这个值。@ASyntuBU我可以批准使用API访问数据访问原始脚本,我使用该帐户进行测试,这是一个严肃的社区,我看不到任何想帮助我解决问题的人在通过电子邮件批准访问权限时遇到任何问题。没问题@brondbyf,我将尝试检查我是否可以执行1000。非常感谢,伙计!根据我看到的文档,100是maxResult的最大值,没有它,根据我的测试,10是默认值。但是你可以尝试检查,也许你可以尝试一些东西。好的,没有问题。T非常感谢您提供的信息。我在电子表格中使用了一个附加组件,可以拉上1000条tweet,所以我相信有一个循环模型可以做到这一点。或者我需要使用tweet搜索,而不是试图直接从个人资料中收集信息,我将对其进行研究,再次感谢!欢迎@brondbyf,很高兴见到您我能够帮助你。祝你好运。没问题@Brondbyf,我会尝试检查我是否能做1000。非常感谢,伙计!根据我看到的文档,100是maxResult的最大值,没有它,根据我的测试,10是默认值。但是
else
{
Browser.msgBox("0 Tweets found");
}
for (var int_i = 0; int_i < obj_data.length; int_i++)
{
array_Column_a.push([int_Line_counter]);
array_Text.push([obj_data.data[int_i].text]);
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tweets").getRange("A3").setValue("Test");
return;
// from: obj_data.length
for (var int_i = 0; int_i < obj_data.length; int_i++) {
// to: obj_data.data.length
for (var int_i = 0; int_i < obj_data.data.length; int_i++) {
// from:
if (obj_data.data[int_i].entities.urls[0] != undefined && obj_data.data[int_i].entities != undefined)
// to: added obj_data.data[int_i].entities.urls to check if it exists
if (obj_data.data[int_i].entities.urls && obj_data.data[int_i].entities.urls[0] != undefined && obj_data.data[int_i].entities != undefined)
if (responseApi.getResponseCode() == 200) {
var obj_data = JSON.parse(responseApi.getContentText());
for (var int_i = 0; int_i < obj_data.data.length; int_i++) {
array_Column_a.push([int_Line_counter]);
array_Text.push([obj_data.data[int_i].text]);
if (obj_data.data[int_i].entities.urls && obj_data.data[int_i].entities.urls[0] != undefined && obj_data.data[int_i].entities != undefined)
array_Expanded_url.push([obj_data.data[int_i].entities.urls[0].expanded_url]);
else
array_Expanded_url.push([""]);
int_Line_counter++;
}
...