2015-09-04 71 views
-1

不知道是否有人可以提供帮助;通过JavaScript循环Twitter推送

我有这段代码基于twitter发布fetcher代码;

它显示了一个一个的推文,但它的工作很好,但是;但一旦达到代码中定义的最大鸣叫次数,它将显示未定义;或者如果它达到了人们必须点击以加载更多的Feed的点;

有没有办法让它循环?例如,如果我将下面的最大推文设置为10,并让它通过10进行循环而不是show undefined?

欣赏你的帮助

/********************************************************************* 
 
* #### Twitter Post Fetcher v13.1 #### 
 
* Coded by Jason Mayes 2015. A present to all the developers out there. 
 
* www.jasonmayes.com 
 
* Please keep this disclaimer with my code if you use it. Thanks. :-) 
 
* Got feedback or questions, ask here: 
 
* http://www.jasonmayes.com/projects/twitterApi/ 
 
* Github: https://github.com/jasonmayes/Twitter-Post-Fetcher 
 
* Updates will be posted to this site. 
 
*********************************************************************/ 
 
(function(w,p){"function"===typeof define&&define.amd?define([],p):"object"===typeof exports?module.exports=p():p()})(this,function(){function w(a){return a.replace(/<b[^>]*>(.*?)<\/b>/gi,function(a,g){return g}).replace(/class=".*?"|data-query-source=".*?"|dir=".*?"|rel=".*?"/gi,"")}function p(a){a=a.getElementsByTagName("a");for(var c=a.length-1;0<=c;c--)a[c].setAttribute("target","_blank")}function n(a,c){for(var g=[],f=new RegExp("(^|)"+c+"(|$)"),h=a.getElementsByTagName("*"),b=0,k=h.length;b< 
 
k;b++)f.test(h[b].className)&&g.push(h[b]);return g}var B="",k=20,C=!0,u=[],x=!1,v=!0,q=!0,y=null,z=!0,D=!0,A=null,E=!0,F=!1,r=!0,G=!0,m=null,H={fetch:function(a){void 0===a.maxTweets&&(a.maxTweets=20);void 0===a.enableLinks&&(a.enableLinks=!0);void 0===a.showUser&&(a.showUser=!0);void 0===a.showTime&&(a.showTime=!0);void 0===a.dateFunction&&(a.dateFunction="default");void 0===a.showRetweet&&(a.showRetweet=!0);void 0===a.customCallback&&(a.customCallback=null);void 0===a.showInteraction&&(a.showInteraction= 
 
!0);void 0===a.showImages&&(a.showImages=!1);void 0===a.linksInNewWindow&&(a.linksInNewWindow=!0);void 0===a.showPermalinks&&(a.showPermalinks=!0);if(x)u.push(a);else{x=!0;B=a.domId;k=a.maxTweets;C=a.enableLinks;q=a.showUser;v=a.showTime;D=a.showRetweet;y=a.dateFunction;A=a.customCallback;E=a.showInteraction;F=a.showImages;r=a.linksInNewWindow;G=a.showPermalinks;var c=document.getElementsByTagName("head")[0];null!==m&&c.removeChild(m);m=document.createElement("script");m.type="text/javascript";m.src= 
 
"https://cdn.syndication.twimg.com/widgets/timelines/"+a.id+"?&lang="+(a.lang||"en")+"&callback=twitterFetcher.callback&suppress_response_codes=true&rnd="+Math.random();c.appendChild(m)}},callback:function(a){var c=document.createElement("div");c.innerHTML=a.body;"undefined"===typeof c.getElementsByClassName&&(z=!1);a=[];var g=[],f=[],h=[],b=[],m=[],t=[],e=0;if(z)for(c=c.getElementsByClassName("tweet");e<c.length;){0<c[e].getElementsByClassName("retweet-credit").length?b.push(!0):b.push(!1);if(!b[e]|| 
 
b[e]&&D)a.push(c[e].getElementsByClassName("e-entry-title")[0]),m.push(c[e].getAttribute("data-tweet-id")),g.push(c[e].getElementsByClassName("p-author")[0]),f.push(c[e].getElementsByClassName("dt-updated")[0]),t.push(c[e].getElementsByClassName("permalink")[0]),void 0!==c[e].getElementsByClassName("inline-media")[0]?h.push(c[e].getElementsByClassName("inline-media")[0]):h.push(void 0);e++}else for(c=n(c,"tweet");e<c.length;)a.push(n(c[e],"e-entry-title")[0]),m.push(c[e].getAttribute("data-tweet-id")), 
 
g.push(n(c[e],"p-author")[0]),f.push(n(c[e],"dt-updated")[0]),t.push(n(c[e],"permalink")[0]),void 0!==n(c[e],"inline-media")[0]?h.push(n(c[e],"inline-media")[0]):h.push(void 0),0<n(c[e],"retweet-credit").length?b.push(!0):b.push(!1),e++;a.length>k&&(a.splice(k,a.length-k),g.splice(k,g.length-k),f.splice(k,f.length-k),b.splice(k,b.length-k),h.splice(k,h.length-k),t.splice(k,t.length-k));c=[];e=a.length;for(b=0;b<e;){if("string"!==typeof y){var d=f[b].getAttribute("datetime"),l=new Date(f[b].getAttribute("datetime").replace(/-/g, 
 
"/").replace("T"," ").split("+")[0]),d=y(l,d);f[b].setAttribute("aria-label",d);if(a[b].innerText)if(z)f[b].innerText=d;else{var l=document.createElement("p"),I=document.createTextNode(d);l.appendChild(I);l.setAttribute("aria-label",d);f[b]=l}else f[b].textContent=d}d="";C?(r&&(p(a[b]),q&&p(g[b])),q&&(d+='<div class="user">'+w(g[b].innerHTML)+"</div>"),d+='<p class="tweet">'+w(a[b].innerHTML)+"</p>",v&&(d=G?d+('<p class="timePosted"><a href="'+t[b]+'">'+f[b].getAttribute("aria-label")+"</a></p>"): 
 
d+('<p class="timePosted">'+f[b].getAttribute("aria-label")+"</p>"))):a[b].innerText?(q&&(d+='<p class="user">'+g[b].innerText+"</p>"),d+='<p class="tweet">'+a[b].innerText+"</p>",v&&(d+='<p class="timePosted">'+f[b].innerText+"</p>")):(q&&(d+='<p class="user">'+g[b].textContent+"</p>"),d+='<p class="tweet">'+a[b].textContent+"</p>",v&&(d+='<p class="timePosted">'+f[b].textContent+"</p>"));E&&(d+='<p class="interact"><a href="https://twitter.com/intent/tweet?in_reply_to='+m[b]+'" class="twitter_reply_icon"'+ 
 
(r?' target="_blank">':">")+'Reply</a><a href="https://twitter.com/intent/retweet?tweet_id='+m[b]+'" class="twitter_retweet_icon"'+(r?' target="_blank">':">")+'Retweet</a><a href="https://twitter.com/intent/favorite?tweet_id='+m[b]+'" class="twitter_fav_icon"'+(r?' target="_blank">':">")+"Favorite</a></p>");F&&void 0!==h[b]&&(l=h[b],void 0!==l?(l=l.innerHTML.match(/data-srcset="([A-z0-9%_\.-]+)/i)[0],l=decodeURIComponent(l).split('"')[1]):l=void 0,d+='<div class="media"><img src="'+l+'" alt="Image from tweet" /></div>'); 
 
c.push(d);b++}if(null===A){a=c.length;g=0;f=document.getElementById(B);for(h="<ul>";g<a;)h+="<li>"+c[g]+"</li>",g++;f.innerHTML=h+"</ul>"}else A(c);x=!1;0<u.length&&(H.fetch(u[0]),u.splice(0,1))}};return window.twitterFetcher=H}); 
 

 

 
/** 
 
* ### HOW TO CREATE A VALID ID TO USE: ### 
 
* Go to www.twitter.com and sign in as normal, go to your settings page. 
 
* Go to "Widgets" on the left hand side. 
 
* Create a new widget for what you need eg "user time line" or "search" etc. 
 
* Feel free to check "exclude replies" if you don't want replies in results. 
 
* Now go back to settings page, and then go back to widgets page and 
 
* you should see the widget you just created. Click edit. 
 
* Look at the URL in your web browser, you will see a long number like this: 
 
* 345735908357048478 
 
* Use this as your ID below instead! 
 
*/ 
 

 
/** 
 
* How to use TwitterFetcher's fetch function: 
 
* 
 
* @function fetch(object) Fetches the Twitter content according to 
 
*  the parameters specified in object. 
 
* 
 
* @param object {Object} An object containing case sensitive key-value pairs 
 
*  of properties below. 
 
* 
 
* You may specify at minimum the following two required properties: 
 
* 
 
* @param object.id {string} The ID of the Twitter widget you wish 
 
*  to grab data from (see above for how to generate this number). 
 
* @param object.domId {string} The ID of the DOM element you want 
 
*  to write results to. 
 
* 
 
* You may also specify one or more of the following optional properties 
 
*  if you desire: 
 
* 
 
* @param object.maxTweets [int] The maximum number of tweets you want 
 
*  to return. Must be a number between 1 and 20. Default value is 20. 
 
* @param object.enableLinks [boolean] Set false if you don't want 
 
*  urls and hashtags to be hyperlinked. 
 
* @param object.showUser [boolean] Set false if you don't want user 
 
*  photo/name for tweet to show. 
 
* @param object.showTime [boolean] Set false if you don't want time of tweet 
 
*  to show. 
 
* @param object.dateFunction [function] A function you can specify 
 
*  to format date/time of tweet however you like. This function takes 
 
*  a JavaScript date as a parameter and returns a String representation 
 
*  of that date. 
 
* @param object.showRetweet [boolean] Set false if you don't want retweets 
 
*  to show. 
 
* @param object.customCallback [function] A function you can specify 
 
*  to call when data are ready. It also passes data to this function 
 
*  to manipulate them yourself before outputting. If you specify 
 
*  this parameter you must output data yourself! 
 
* @param object.showInteraction [boolean] Set false if you don't want links 
 
*  for reply, retweet and favourite to show. 
 
* @param object.showImages [boolean] Set true if you want images from tweet 
 
*  to show. 
 
* @param object.lang [string] The abbreviation of the language you want to use 
 
*  for Twitter phrases like "posted on" or "time ago". Default value 
 
*  is "en" (English). 
 
*/ 
 

 
// ##### Advanced example ##### 
 
// An advance example to get latest 5 posts using hashtag #API and write to a 
 
// HTML element with id "tweets2" without showing user details and using a 
 
// custom format to display the date/time of the post, and does not show 
 
// retweets. 
 
var config4 = { 
 
    "id": '638725381294551040', 
 
    "domId": 'twitterfeed', 
 
\t "showUser": false, 
 
    "maxTweets": 10, 
 
    "enableLinks": true, 
 
    "customCallback": gotTweets 
 
}; 
 
twitterFetcher.fetch(config4); 
 

 
var tweets = []; 
 
var i = 0; 
 
function gotTweets(data){ 
 
    tweets = data; 
 
}; 
 
function showNextTweet() { 
 
    document.getElementById("twitterfeed").innerHTML = tweets[i]; 
 
    i++; 
 
    console.log("Showing tweet " + (i+1)); 
 
} 
 
setInterval(showNextTweet, 4000);
<div id="twitterfeed"><br>loading tweets</div>

+0

是的,基本上我想循环他们 - 我会看看如果工作 - 谢谢你的帮助 –

回答

1

我不知道你在问什么,它会帮助,如果你会更具体。也许这就是你想要的(不过这可能很简单):

function showNextTweet() { 
    // Reset your counter 
    if(i >= tweets.length) { 
     i = 0; 
    }   
    document.getElementById("twitterfeed").innerHTML = tweets[i]; 
    i++; 
    console.log("Showing tweet " + (i+1)); 
}