ik zou graag de berichten ophalen van enkele tweets.
Hoe doe ik dit het best? xml?
Het zouden de laatste 2 moeten zijn.
Ik dacht om ze misschien anders op te roepen, in mijn database te plaatsen?
Of hoe zouden jullie het doen?
Ik zou het in mijn eigen layout moeten kunnen doen.
Weet niet of dit lukt met de API.
Zal nog even verder zoeken.
Dem
En welke berichten van welke tweet (is dat niet hetzelfde???) wil je ophalen?
Met de API kan je in theorie alles binnenhalen wat je nodig hebt.
Die zou ik NIET dubbel opslaan in je eigen database (tenzij je niet vaak nieuwe tweets hebt), maar gewoon elke keer via de API ophalen.
Zo blijft het recent.
Eigen opmaak is altijd goed te fixen.
Op http://www.zundappforum.com/portal.php heb ik gebruik gemaakt van een script (zie broncode) en daarvan met inline-css en wat !important;'s mijn eigen draai eraan gegeven.
Geen moeite en werkt direct en live (dus wordt ook ververst na zoveel seconden)
Ik vind ook niet echt de API om die berichten op te halen, mijn engels is niet zo goed maar ik denk dat het dit is:
https://dev.twitter.com/docs/embedded-tweets
Wat betekent embedded trouwens? Op vertalingsites vind ik niet de juiste vertaling.
Of is het die site misschien?
https://dev.twitter.com/docs/anywhere/welcome
Ik heb naar de inline css gekeken en kan er misschien iets uit leren.
Dem
Toevoeging op 06/05/2012 15:05:08:
Via dat in je broncode heb ik jouw tweets opgehaald.
Nu snap ik het.
Alleen daar enkele vraagjes over.
bij: search: '#zundappforum OR #zundapp'.
Daar kan ik ook @twitter OR #twitter van maken?
Bij: subject: '#zundapp op Twitter',
Waarom een onderwerp?
Toevoeging op 06/05/2012 15:07:28:
Nog iets,
om de hoeveel seconden wordt hij herladen?
Ik heb mijn twitter daar nu in aangepast en nu kom ik op het probleem dat bij twitter mijn pagina overbelast is?
Dem Ian op 06/05/2012 15:01:10:
Wat betekent embedded trouwens? Op vertalingsites vind ik niet de juiste vertaling.
Embedded = geïntegreerd, ingevoegd, ingelaaden. Als je iets embedded voeg je iets in een video van youtube of een applicatie etc.
Gewijzigd op 06/05/2012 15:23:14 door Joey Drieling
Ik zou 1x in de zoveel tijd tweets ophalen en dan opslaan in je database. Aangezien je twitter maar 125 per uur of dergelijke mag ophalen. Het voordeel van database is dat je niet elke keer twitter api hoeft te gebruiken en dus sneller je website laden. Ook heb je volledige controlle over de tweets, welke wil je wel op je website etc, of stel twitter is een keer offline of dergelijke dan eb je tenminste al je laatste tweets op je website.
In mijn database kan ik wel stoppen en dan met een cronjob.
Misschien elke 30 in plaats van elk uur.
hoeft geen Cronjob... Gewoon ophalen als iemand de site bezoekt, als iemand site bezoekt maak je sessie aan met de laatste tijd dat hij of zij tweets heeft opgehaald.
maar hoe zou je die dan ophalen?
je zou ze op kunnen halen op basis van de RSS feed dit bij het kanaal hoort;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
$username = 'harrysally';
$url = sprintf("http://twitter.com/statuses/user_timeline/%s.rss", $username);
if ($rss = @file_get_contents($url)) {
$xml = @simplexml_load_string($rss);
if ($xml !== false) {
if (is_array((array)$xml->channel->item) && count((array)$xml->channel->item)) {
foreach ((array)$xml->channel->item as $tweet) {
print date('Y-m-d H:i:s',strtotime($tweet->pubDate));
print $tweet->description;
print '<hr />';
}
} else {
print "Channelitems node lijkt leeg";
}
} else {
print "XML gaf geen geen geldige string terug";
}
} else {
print "Geen (geldig) RSS formaat";
exit;
}
?>
$username = 'harrysally';
$url = sprintf("http://twitter.com/statuses/user_timeline/%s.rss", $username);
if ($rss = @file_get_contents($url)) {
$xml = @simplexml_load_string($rss);
if ($xml !== false) {
if (is_array((array)$xml->channel->item) && count((array)$xml->channel->item)) {
foreach ((array)$xml->channel->item as $tweet) {
print date('Y-m-d H:i:s',strtotime($tweet->pubDate));
print $tweet->description;
print '<hr />';
}
} else {
print "Channelitems node lijkt leeg";
}
} else {
print "XML gaf geen geen geldige string terug";
}
} else {
print "Geen (geldig) RSS formaat";
exit;
}
?>
Maar ik zou persoonlijk gebruik maken van de @api, op die manier heb je de load ook van je systeem af. Bovenstaande broncode is dan ook niet "zuinig".
Suc6!
Gewijzigd op 06/05/2012 19:14:34 door Toine vd P
Dit kan dus makelijk via de widget denk ik.
Dus 2 containers.
Dit is de layout:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<div id="twitter">
<div class="twitter_header">
<span class="twitterTitle">Twitter</span>
<span class="twitterHash">@Beursspel</span>
</div>
<div class="twitter_wrapper">
<div class="twitter_sr_account">
<div class="twitterBox_account">
<div class="twitterBoxRepeat_account">
<div class="myHiddenTwitterData_account">
<div class="twitter_min_items_account">0</div>
<div class="twitter_max_items_account">1</div>
<div class="twitter_search_account">from:@Beursspel</div>
<div class="twitter_userLoggedIn_account">0</div>
</div>
<div id="twitterMaxOverflow_account">
<div class="twitterBoxInner_account"></div>
</div>
</div>
</div>
</div>
<div class="twitter_header2">
<span class="twitterTitle">Twitter</span>
<span class="twitterHash">#Beursspel</span>
</div>
<div class="twitter_sr">
<div class="twitterBox">
<div class="twitterBoxRepeat">
<div class="myHiddenTwitterData">
<div class="twitter_min_items">0</div>
<div class="twitter_max_items">10</div>
<div class="twitter_search">#Beursspel</div>
<div class="twitter_userLoggedIn">0</div>
</div>
<div id="twitterMaxOverflow">
<div class="twitterBoxInner"></div>
</div>
</div>
</div>
</div>
</div>
<span class="joinCon"><a href="http://twitter.com/#search?q=Beursspel" target="_blank">Join the conversation</a></span>
<div class="twitter_header">
<span class="twitterTitle">Twitter</span>
<span class="twitterHash">@Beursspel</span>
</div>
<div class="twitter_wrapper">
<div class="twitter_sr_account">
<div class="twitterBox_account">
<div class="twitterBoxRepeat_account">
<div class="myHiddenTwitterData_account">
<div class="twitter_min_items_account">0</div>
<div class="twitter_max_items_account">1</div>
<div class="twitter_search_account">from:@Beursspel</div>
<div class="twitter_userLoggedIn_account">0</div>
</div>
<div id="twitterMaxOverflow_account">
<div class="twitterBoxInner_account"></div>
</div>
</div>
</div>
</div>
<div class="twitter_header2">
<span class="twitterTitle">Twitter</span>
<span class="twitterHash">#Beursspel</span>
</div>
<div class="twitter_sr">
<div class="twitterBox">
<div class="twitterBoxRepeat">
<div class="myHiddenTwitterData">
<div class="twitter_min_items">0</div>
<div class="twitter_max_items">10</div>
<div class="twitter_search">#Beursspel</div>
<div class="twitter_userLoggedIn">0</div>
</div>
<div id="twitterMaxOverflow">
<div class="twitterBoxInner"></div>
</div>
</div>
</div>
</div>
</div>
<span class="joinCon"><a href="http://twitter.com/#search?q=Beursspel" target="_blank">Join the conversation</a></span>
Hoe zou ik ze het best inladen.
Met de appi kan dit maar die style zal het moeilijkste zijn.
Edit:
#twitter .twitterTweet, #twitter .twitterTweet_account {margin:4px 0;float:left;}
#twitter .tweetPhoto, #twitter .tweetPhoto_account{width:30px; height:30px; margin:0 10px 3px 0; float:left;}
#twitter .twitterRow, #twitter .twitterRow_account{width:144px;float:left;}
#twitter .tweetProfile,#twitter .tweetProfile_account {color:#00a4ee;line-height:29px;float:left;}
#twitter .tweetInfo, #twitter .tweetInfo_account{font-size:7pt; }
#twitter a {color:#00A4EE;text-decoration:underline;}
#twitter a:hover {text-decoration:none;}
#twitter .joinCon a {position:absolute;bottom:20px;right:22px;font-size:9pt;color:#005693;text-decoration:none;float:left;}
#twitter .joinCon a:hover {text-decoration:underline;}
Dit is de twitter.
En ik had ook al een script op phphulp gevonden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
//////////////////////////////////////////////
// TWITTER WIDGET VERSION 1.2.1 //
// Justin Streuper | streuper.com //
//////////////////////////////////////////////
$username = 'Beursspel'; // gebruikersnaam
$tweetCount = 1; // aantal tweets
$twitterFeed = 'http://api.twitter.com/1/statuses/user_timeline/'.$username.'.xml?count='.$tweetCount;
function timeAgo($timestamp)
{
$timestamp = strtotime($timestamp);
$now = time();
$timediff = floor($now - $timestamp);
switch(true)
{
case ($timediff < 60):
return $timediff.' seconds ago';
case($timediff >= 60 && $timediff < 3600):
return floor($timediff/60).' minutes ago';
case($timediff >= 3600 && $timediff < 7200):
return floor($timediff/3600).' hour ago';
case($timediff >= 7200 && $timediff < 86400):
return floor($timediff/3600).' hours ago';
case($timediff >= 86400 && $timediff < 172800):
return floor($timediff/86400).' day ago';
case($timediff >= 172800 && $timediff < 602800):
return floor($timediff/86400).' days ago';
case($timediff >= 602800 && $timediff < 1209600):
return floor($timediff/602800).' week ago';
case($timediff >= 1209600 && $timediff < 3026000):
return floor($timediff/602800).' weeks ago';
default:
return date('d-m-Y H:i', $timestamp);
}
}
function makeLinksClickable($text)
{
$text = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $text);
$text = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $text);
return $text;
}
$twitterCurl = curl_init();
curl_setopt($twitterCurl, CURLOPT_URL, $twitterFeed);
curl_setopt($twitterCurl, CURLOPT_RETURNTRANSFER, TRUE);
$twitter = curl_exec($twitterCurl);
$tweets = new SimpleXMLElement($twitter);
foreach ($tweets->status as $tweet)
{
echo '<div class="tweet-container">';
echo '<div class="tweet-user-image">';
echo '<img src="'.$tweet->user->profile_image_url.'" alt="" />';
echo '</div>';
echo '<div class="tweet-username">';
echo '<a href="http://www.twitter.com/'.$tweet->user->screen_name.'">'.$tweet->user->name.'</a>';
echo '</div>';
echo '<div class="tweet-message">';
echo makeLinksClickable($tweet->text);
echo '</div>';
echo '<div class="tweet-post-datetime">';
echo timeAgo($tweet->created_at);
echo '<br />';
echo '</div>';
echo '</div>';
}
curl_close($twitterCurl);
?>
//////////////////////////////////////////////
// TWITTER WIDGET VERSION 1.2.1 //
// Justin Streuper | streuper.com //
//////////////////////////////////////////////
$username = 'Beursspel'; // gebruikersnaam
$tweetCount = 1; // aantal tweets
$twitterFeed = 'http://api.twitter.com/1/statuses/user_timeline/'.$username.'.xml?count='.$tweetCount;
function timeAgo($timestamp)
{
$timestamp = strtotime($timestamp);
$now = time();
$timediff = floor($now - $timestamp);
switch(true)
{
case ($timediff < 60):
return $timediff.' seconds ago';
case($timediff >= 60 && $timediff < 3600):
return floor($timediff/60).' minutes ago';
case($timediff >= 3600 && $timediff < 7200):
return floor($timediff/3600).' hour ago';
case($timediff >= 7200 && $timediff < 86400):
return floor($timediff/3600).' hours ago';
case($timediff >= 86400 && $timediff < 172800):
return floor($timediff/86400).' day ago';
case($timediff >= 172800 && $timediff < 602800):
return floor($timediff/86400).' days ago';
case($timediff >= 602800 && $timediff < 1209600):
return floor($timediff/602800).' week ago';
case($timediff >= 1209600 && $timediff < 3026000):
return floor($timediff/602800).' weeks ago';
default:
return date('d-m-Y H:i', $timestamp);
}
}
function makeLinksClickable($text)
{
$text = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $text);
$text = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $text);
return $text;
}
$twitterCurl = curl_init();
curl_setopt($twitterCurl, CURLOPT_URL, $twitterFeed);
curl_setopt($twitterCurl, CURLOPT_RETURNTRANSFER, TRUE);
$twitter = curl_exec($twitterCurl);
$tweets = new SimpleXMLElement($twitter);
foreach ($tweets->status as $tweet)
{
echo '<div class="tweet-container">';
echo '<div class="tweet-user-image">';
echo '<img src="'.$tweet->user->profile_image_url.'" alt="" />';
echo '</div>';
echo '<div class="tweet-username">';
echo '<a href="http://www.twitter.com/'.$tweet->user->screen_name.'">'.$tweet->user->name.'</a>';
echo '</div>';
echo '<div class="tweet-message">';
echo makeLinksClickable($tweet->text);
echo '</div>';
echo '<div class="tweet-post-datetime">';
echo timeAgo($tweet->created_at);
echo '<br />';
echo '</div>';
echo '</div>';
}
curl_close($twitterCurl);
?>
Gewijzigd op 06/05/2012 20:26:25 door - Diov -
Als je het via PHP inlaadt, dan zou ik wel een AJAX-request gebruiken.
Ik ga er vanavond wat aan werken.
De site is de volgende:
http://www.smashingmagazine.com/2009/03/02/twitter-web-designer-and-developer-toolbox-api-and-tutorials/
Dit haald gewoon de tweets op van een account en displayed ze (inclusief de @ links voor gebruikersnamen), je kunt het limiteren tot het aantal tweets wat je zelf wilt.
Tevens is dit allemaal te maken met de originele Twitter API, echter moet je wel de oAuth goed opzetten en dus de 'key' van dat Twitter account hebben.
Als je wil kan ik dat scriptje wel even plaatsen mocht je er zelf niet uitkomen. Ik laat ze meestal doormiddel van <marquee></marquee> voorbij scrollen, aangezien ik meestal 5 tot 10 Tweets voorbij laat komen.
Gewijzigd op 07/05/2012 08:12:59 door Chris PHP
Maar ik roep er 1 van de @Twitterkaneel en 1 van #Twitterkanaal op.
Die wil ik dan in een box zetten.
Alvast bedankt.
Dat is geen probleem, zolang jij de oAuth key kunt bemachtigen van het account moet dat gewoon werken.
Het is mijn eigengemaakt account dus ik kan eraanraken.