Addon TwitterControl – Twitter feed komponenta

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
smasty
Člen | 90
+
0
-

Diskusia k doplnku TwitterControl.

Editoval smasty (27. 8. 2011 16:52)

ic
Člen | 430
+
0
-

Dívám se, že je tam vuyžité https://api.twitter.com/1/statuses/user_timeline.json a chápu dobře, že je to bez OAuth?

Taky jsem twitter komponentu dělal… nebyla zdaleka takhle pěkná, ale hlavní problém jsem měl s tím, že bez OAuth (což jsem nechtěl) je tam limit 150-ti požadavků na hodinu a IP. Nějak jsem nakonec využil vyhledávací API, kde ten limit sice není, ale zato nemůže načítat hodně staré tweety.

smasty
Člen | 90
+
0
-

ic: Áno, je to bez OAuth, v podstate len úplne klasické file_get_contents. O limite 150/h/IP viem, preto plánujem (okrem iného) vstavanú podporu cache, pre stránky, ktoré teoreticky dosahujú vyššiu návštevnosť ako 150 pageviews/h.

Tiež zvažujem použitie Davidovej knižnice Twitter for PHP, ktorá myslím používa OAuth…

ic
Člen | 430
+
0
-

Pro sdílené hostingy by to chtělo asi cron a data načítat hned začátkem každé hodiny, protože co jsem zkoušel je těžké vůbec něco dostat… asi tam všichni používají twitter nebo co.

Jinak s tím hledáním je taky docela lagrace:
http://search.twitter.com/search.json?q=from:$usename&rpp=$count&page=$page
má to myslím souvislost s https://twitter.com/search-advanced

EDIT: Hledání je na prd… lepší jsou webové proxy. Mohl by být pokus na http://api.twitter.com/1/statuses/user_timeline.json... a pokud se nepodaří získat data, tak
zkusit http://anonymouse.org/cgi-bin/anon-www.cgi/http://api.twitter.com/1/statuses/user_timeline.json... a další. Takových proxyn by mělo být asi hodně, chtělo by je to vyhledat a pak by si je uživatel mohl zadat (nebo napevno ve scriptu?).

Napadá mě, nebylo by lepší u těch odkazů směřovat rovnou na danou URI? mimo zkracovač? Protože tam je odkaz který končí na http://nekam.tld/neco, to je taky zobrazeno v textu a v title, ale ‚href‘ je na http://t.co/d6hfd. Přitom by bylo rychlejší ten zkracovač vynechat, předešlo by se problémům s jeho případnou nefunkčností a vyhledávače by to myslím taky potěšilo.

Editoval ic (28. 8. 2011 11:47)

ic
Člen | 430
+
0
-

Co jsem se díval, tak favourite nefunguje úplně ideálně… na stránce Twitteru se musí na potvrzovací tlačítko kliknout vždy 2x… poprvé se jen obnoví stránka, ale jinak se nic nestane.
To asi ale vypadá na nějakou chybu Twitteru.

Pak ještě… je k něčemu nutný ten http://platform.twitter.com/widgets.js script, myslím Twitter ho vyžaduje nebo tak něco? Protože jeho funkce jsou dost divné, spíše nežádoucí. Otevírá intent stránky v novém okně, a taky nedovolí kliknutí na intent odkazy pravým tlačítkem myši, čímž navíc spustí popup blocker, který mu otevření nového okna zakáže. Přitom to samé by svedl jednoduchý javascript a tam jsou kilobajty kódu.

smasty
Člen | 90
+
0
-

@ic: Nemal som zatiaľ čas skúmať ten widgets.js. Bol v dokumentácii k Tweet Intents, tak sm ho tam použil. Ten istý sa ale používa aj na Tweet button, preto je asi taký rozsiahly. Možno ho v neskorších verziách nahradím niečím iným, uvidím.

ic
Člen | 430
+
0
-

Nahradil jsem si ho jednoduchým javascriptem, tak se ptám jen jestli jsem neporušil nějaké Twitterovské přikázání.

<a href="{$t->id_str|intent:'reply'}" onclick="return !popup(this)">Reply</a>
<a href="{$t->id_str|intent:'retweet'}" onclick="return !popup(this)">Retweet</a>
<a href="{$t->id_str|intent:'favorite'}" onclick="return !popup(this)">Favorite</a>
.
.
.
<script n:if="$config->intents">
	function popup(a) {
		return window.open(a.href,"_blank","top="+(screen.availHeight-500)/2+",left="+(screen.availWidth-600)/2+",width=600, height=500");
	}
</script>

Navíc teď funguje pravé tlačítko myši.

smasty
Člen | 90
+
0
-

ic: Nič si určite neporušil. Tweet Intents sú na tom widgets.js nezávislé, využívajú ho v podstate len na otváranie v popups.

Vo verzii, ktorá bude obsahovať podporu pre lightbox-like zobrazovanie fotiek s Twitteru, z najväčšou pravdepodobnosťou widgets.js vyhodím.

Neviem ale zatiaľ povedať, kedy to bude, keďže mi za chvíľu začína opäť škola…

smasty
Člen | 90
+
0
-

Dnes som uvoľnil verziu 2.0.

Novinky:

  1. Prehľadnejšia štruktúra – rozdelenie na viacero logických celkov (Control, Formatter, Loader)
  2. Z toho vyplýva možnosť napísať si vlastný Loader/Formatter a a použiť napr. OAuth
  3. Zmena namespaces: Smasty\Components\Twitter\Control.
  4. Podpora Media entities – obrázky z tweetov sa zobrazujú formou „lighboxu“.
ic
Člen | 430
+
0
-

smasty napsal(a):

Dnes som uvoľnil verziu 2.0.

Moc pěkné úpravy.

Jen ten vtípek s tím Conponents jak stojí ve všech ukázkách https://componette.org/search/?… se dost špatně hledá… pořád na to zírám a nechápu co je špatně XD

smasty
Člen | 90
+
0
-

@ic: Neviem, o akom vtípku hovoríš… Môžeš to upresniť?

ic
Člen | 430
+
0
-

smasty napsal(a):

@ic: Neviem, o akom vtípku hovoríš… Môžeš to upresniť?

To je právě ono… špatně se to hledá… v příkladech na stránce je …return new Smasty\Conponents\Twitter\Control(array(…

kdežto ve zdrojácích je

…namespace Smasty\Components\Twitter;…

smasty
Člen | 90
+
0
-

Aha, preklep… Vďaka, opravil som.

plasmo
Člen | 66
+
0
-

Ahoj,
přidal jsem control do stránky, ale vyhučela chyba:

file_get_contents(https://api.twitter.com/1/statuses/user_timeline.json?screen_name=livetradingsro&count=1&include_rts=true&include_entities=true): failed to open stream: No error

Co s tím? Děkuji

jannemec
Člen | 78
+
0
-

Trochu váhám, jestli nepoopravit konstruktor – tak aby byl kompatibilní s tím z Control v Nette

<?php
/**
	 * Create the TwitterControl.
         * @param IContainer $parent
         * @Param string $name
	 * @param array|string|int $config Config options (array) or Twitter screen name (string) or Twitter user ID (int)
	 * @return void
	 */
	public function __construct(Nette\ComponentModel\IContainer $parent = NULL, $name = NULL, $config = NULL){
            parent::__construct($parent, $name);
		if(!$config)
?>

Používám totiž továrničku na komponenty a pak lze užít standardní

<?php
protected function createComponent($name) {
        switch ($name) {
            case 'twitterFeed':
                $control = new Smasty\Components\Twitter\Control($this, $name, array(
                                'screenName' => 'xxxxx',
                                'tweetCount' => 5
                            ));
                break;
?>
smasty
Člen | 90
+
0
-

Môžete použiť napr.

$control = new Smasty\Components\Twitter\Control(['screenName' => 'xxxxx', 'tweetCount' => 5]);
$this->addComponent($control, $name);
kedrigern
Člen | 102
+
0
-

Např. právě teď je Twitter přetížen a vyhazuje chybu. Blbé je, že komponenta vyhodí výjimku a tím shodí celou app.

Asi by bylo dobré při špatné návratové hodnotě jen vypsat nějakou error šablony („twitter dočasně nedostupný“), aby si toho zbytek app nevšiml. Brání tomu něco? No přepíšu si to a hodím pull na githubu, ale když se někdo přihlásíte předem, že je to z nějakého důvodu blbost, tak se rád poučím :).

tom
Člen | 171
+
0
-

Mam stejnou chybu. Jak toto resit?

Diky

plasmo napsal(a):

Ahoj,
přidal jsem control do stránky, ale vyhučela chyba:

file_get_contents(https://api.twitter.com/1/statuses/user_timeline.json?screen_name=livetradingsro&count=1&include_rts=true&include_entities=true): failed to open stream: No error

Co s tím? Děkuji