utilizzo api twitter

16 contenuti / 0 new
Ultimo contenuto
utilizzo api twitter

Salve a tutti.
Sono uno studente universitario e mi è stato chiesto di sviluppare un modulo per drupal per integrare twitter.
In particolare dovrei visualizzare in un blocco dei tweets con determinati hashtags.
Guardando la documentazione delle api ho trovato delle librerie che forse fanno al caso mio (https://github.com/abraham/twitteroauth).
Non sono un'esperto in programmazione ma dovrò prima o poi cominciare.
La mia prima domanda è:
La suddetta libreria va inserita in site/all/libraries(dopo aver installato il modulo Libraries)??
Grazie in anticipo..

Drupal Version:

Non è necessario che metti la libreria in */libraries/ a meno che tu non la voglia rendere condivisibile anche da altri moduli. Puoi tranquillamente inserirla nella cartella del modulo e richiamarla da lì.

PS - perché Drupal 6?

grazie per la risposta.
devo usare drupal 6 perchè il progetto che sto facendo è per un sito seguito dall'università:

Mi chiedono un modulo personalizzato che faccia le seguenti cose su un blocco indipendente:
a) Importare tutti i tweets con determinati hashtags
b) Twittare +o-10 post del blog ogni giorno, creando prima un gruppo di post che non siano simili tra loro...
Sto un po' studiando come funzionano le api di twitter.
Per la prima parte credo non abbia bisogno di autenticazioni, ma per la seconda parte è necessario.
Io sono nuovo in drupal e anche in php.
Sto facendo questo progetto per un tirocinio universitario.
Fonti a cui sto facendo riferimento:
-Restful-php-web-services (Packt Publishing) per capire come fare le richieste e usufruire dei servizi
-Learning Drupal 6 Module Development per lo sviluppo del modulo per creare un blocco con le visualizzazioni
-dev.twitter.com per le api di twitter e in particolare (https://github.com/abraham/twitteroauth).

Non riesco ancora a capire come integrare le funzioni di drupal e quelle delle librerie.
Per me è davvero un mondo nuovo.
La mia esperienza di programmazione ad oggetti ha riguardato solo linguaggio c++
A chiunque sia disponibile a darmi delle dritte sarei davvero grato...
insomma nuoto nel fango...grazie a tutti in anticipo...

Hai provato a guardare il modulo http://drupal.org/project/twitter e quello http://drupal.org/project/oauth? Secondo me, per l'integrazione dovrebbero bastare quelli. Poi presumo che quello di Twitter esponga una specie di sua API per interrogare la API di Twitter.

a quanto pare non vanno bene per il prof.
Gia proposto ma senza risultati.
e comunque nel modulo twitter non mi pare ci siano le caratteristiche richieste.
In più ho provato ad installarlo ma mi ha dato molti problemi nel riconoscere l'utente.
Nel modulo da progettare non servira l'accesso tramite twitter per tutti gli utenti tranne che per l'amministratore che dovrà avere la possibilità si settare le impostazioni(hashtags,post,ecc).
Ho guardato il modulo twitter block search per drupal 7 e sembrerebbe più simile a quello che mi serve, almeno per quanto riguarda la prima parte del progetto, ma ci ho capito non tutto guardando il codice.
Specie la parte che riguarda l'autenticazione.
ti ringrazio per il consiglio.

ah, ma quindi i vincoli li stabilisce il prof… Direi che a questo punto conviene che ti leggi un po' della documentazione di Twitter su Oauth

ok..grazie comunque

Rieccomi...credo che chiederò aiuto da queste parti visto che all'università non c'è nessuno che mi dia una linea guida..non vi sto chiedendo di scrvermi un modulo ma vi chiedo solo di dare un'occhiata a quello che sto facendo e se lo sto facendo bene...

La prima parte del progetto riguarda solo rintracciare dei tweet con determinati hashtags.
Ho cominciato a sviluppare il mio modulo.
mytwitter.info//
mytwitter.install//utilizzo di hook_install e unistall
mytwitter.module
Template[path]

Idea di base.

Per quanto riguarda mytwitter.module(prendetelo come pseudocodice..)

mytwitter_perm()//per i permessi viene passato un array per la configurazione dei permessi
mytwitter_block(){
...
...
case 'view': default:
      switch ($delta) {
        case 'hashtag':
$url = 'http://search.twitter.com/search.json?q=';

          $block['subject'] = t('Mytwitter Block #hashtag');
          $block['content'] = _mytwitter_fetch_tweet($url);
          break;
        case 'user_timeline':
          $block['subject'] = t( 'mytwitter  timeline');
          $block['content'] = theme('mytwitter_block_user_timeline');
        break;
      }
      return $block;
}

A questo punto mi chiedevo se l'impostazione iniziale è giusta per creare due blocchi fusi in uno.

Quindi sono passato ad occupparmi della configurazione per i due blocchi (in realtà per adesso solo con il primo) con

  • hook_block_settings_save()
  • e quindi

  • _mytwitter_hashtag_setting()(return $form)
  • _mytwitter_timeline_settings()(return $form)
  • mi chiedevo se va bene in quetso modo a creare un array di '$settings' per creare dati come hashtag,utente twitter,ecc,...non sono ancora sicuro che funzioni ma dovrebbe.

    quindi sono passato a creare la mia funzione _mytwitter_fetch_tweets()
    l'idea è questa:

    _mytwitter_fetch_tweets($url,$settings, $numTweets){
    $final_urls = $url.urlencode($settings -> 'query')
    $response =drupal_http_request($final_url);//tralasciando il controllo sull'esiito della rischiesta;
    $json = decode_json($response);//

    a questo punto però non capisco come andare avanti per certo...o comunque non so se sto seguendo la strada giusta...
    una volta che ottengo i dati JSON utilizzerei un ciclo foreach per estrapolare i dati che mi interessano(text,img_url,from:user) all'interno di un ciclo while per limitare il numero di tweets da visualizzare.
    Ma non capisco come questo verra aggiornato ogni volta.
    Penso che dovrei utilizzare le funzioni caching ma non ho ben capito come impostare il tutto.
    Comunque, considerando che riesca a risolvere questo problema, il passo successivo sarà quello di impostare un template richiamando una funzione theme o utilizzando le jquery sempre da quest'ultima funzione visto che viene richiamata nell'hook_block ...é giusto?

    Sper di essermi spiegato e non aver creato troppa confusione...

    Eh, c'è tata roba a cui rispondere… cerchiamo di spezzare le richieste.

    Alcune note.
    - Cosa intendi con "creare due blocchi fusi in uno"?
    - In D6, la logica per salvare i dati di configurazione del modulo sono gestiti da $op = 'save'; se vuoi puoi salvare l'array con le info di configurazione serializzandolo e registrandolo con variable_set() nella tabella variable. Ovviamente, dovrai recuperare i dati e unserializzarli quando mostri $op = 'config'
    - Quando hai scaricato i dati puoi cacharli in qualche modo oppure riversarli come sono nella pagina. Ovviamente, cachandoli, hai un netto guadagno di prestazioni. Per cacharli ti consiglio di creare una tabella di cache apposita in tuomodulo.install

    grazie mille Pinolo.
    In effetti sono troppe le mie richieste...e credo di averle anche spiegate male.

    - Cosa intendi con "creare due blocchi fusi in uno"?

    Vorrei metterli in una stessa regione.
    Comunque credo che farò meglio a postare il codice per poter mostrare in modo chiaro quello che sto facendo...è che cercavo di riassumere ...forse perchè mi sento in colpa di chiedere tanto.
    :-)

    In D6, la logica per salvare i dati di configurazione del modulo sono gestiti da $op = 'save'; se vuoi puoi salvare l'array con le info di configurazione serializzandolo e registrandolo con variable_set() nella tabella variable. Ovviamente, dovrai recuperare i dati e unserializzarli quando mostri $op = 'config'

    forse la mia domanda è studipa...per 'save' si intende che andrà ad inserirli in una tabella di database?quindi richiamare hook_schema() in mymodule.install??

    Ti ringrazio Pinolo mi hai chiarito dei dubbi...
    Dovro' studiare un po' come funziona il caching credo oltre a tanta altra ..
    Credo che postero il codice ...magari riesco a spiega

    grazie per la risposta..
    i tuoi consigli mi hanno dato una via su cui camminare...

    cerco di mettere ordine..e andare avanti un passo alla volta...
    Creo la struttura per i miei due blocchi fusi in uno..
    Spero che sia di aiuto anche ad altri..

    function mytwitter_block($op = 'list', $delta = 0, $edit = array()) {
    switch ($op) {
    case 'list':
    $blocks['hashtag_search'] = array(
    'info' => t('Hashtag Search')
    );
    $blocks['user_timeline'] = array(
    'info' => t('Timeline @UserTwitter')//da svilluppare successivamente.
    );
    return $blocks;
    case 'configure':
    //fondere i due form in uno
    if($delta == 'hashtag_search'){
    return _mytwitter_block_hashtag_settings();
    }
    return _mytwitter_block_timeline_settings();//DA SVILUPPARE :-)
    case 'save':
      return _mytwitter_block_settings_save($delta, $edit);
    case 'view': default:
         switch ($delta) {
           case 'hashtag_search':
             $block['subject'] = t('My Twitter #hashtag search');
             $block['content'] = _mytwitter_block_fetch_tweets(sett);
             break;
           case 'user_timeline':
             $block['subject'] = t('My Twitter user timeline');
             $block['content'] = t('andremo ad installa re qui la timeline');//da sviluppare successivamente
           break;
         }
         return $block;
    }
    }

    quindi considerando solo la prima parte del blocco ...

    function _mytwitter_block_settings_save($delta = NULL, $edit = array()){
      $settings = array(
        'limit' => (int)check_plain($edit['limit']),
        'rate' => (int)check_plain($edit['rate']),
        'hashtag' => check_plain($edit['hashtag']),
      );
      switch ($delta) {
        case 'hashtag_search':
          variable_set('mytwitter_block_hashtag', $settings);
        break;
        case 'eclap_timeline':
          variable_set('mytwitter_block_eclap_timeline', $settings);
        break;
      }
    }
    function _mytwitter_block_hashtag_settings(){
    $form = array();
    $oldSettings = variable_get('mytwitter_block_hashtag', array(
        'limit' => 10,
        'rate' => 1000,//mille secondi per il cache
        'hashtag' => 'eclap'
        ));
    $form['mytwitter'] = array(
        '#type' => 'fieldset',
        '#title' => t('My twitter settings')
        );
    $form['mytwitter']['limit'] = array(
        '#description' => 'inserire il numero di tweets che vogliamo visualizzare',
        '#type' => 'textfield',
        '#title' => t('Numero tweet'),
        '#default_value' => $oldSettings['limit'],
    );
    $form['mytwitter']['rate'] = array(
        '#type' => 'textfield',
        '#title' => 'Update rate (s)',
        '#default_value' => $oldSettings['rate']
        );
    $form['mytwitter']['hashtag'] = array(
        '#description' => 'Inserire hashtags da ricercare con twitter',
        '#type' => 'textfield',
        '#title' => t('Hashtags'),
        '#default_value' => $oldSettings['hashtag']
    );
    }
    function _mytwitter_block_timeline_settings(){
    //questa parte riquardera il settaggio del secondo blocco.
    }*

    che ne dite? ...puo' andare?..

    Per quanto riguarda save, come ti dicevo non è necessario creare una tabella con hook_schema: i settaggi del blocco li puoi serializzare e salvare nella tabella variable con variable_set. Ovviamente, per popolare il form dei settings alla sua visualizzazione, dovrai fare un variable_get ed estrarre i dati dall'array.

    grazie..funziona..;-)..
    ora mi resta finire di creare uno script javascript per prelevere i tweets e mostrarli nel blocco.
    Ci sto lavorando con non pochi problemi...speriamo bene...

    Rieccomi...
    mi sembra giusto condividere il risultato con tutti voi..
    Per quanto riguarda la prima parte del mio progetto,ottenere tweet con determinati hashtags, ho risolto il tutto utilizzando la libreria jQuery e le api Twitter Search...
    Per chi è interessato potrei postare parte del codice o può contattarmi.
    Ma cercherò di descriverlo in poche parole:
    Nel mio blocco chiamo una funzione per il contenuto come segue:

    function miomodulo_block_content(){
       drupal_add_js($path_js, 'module')
       $output = "<div id=tweets>";
       $output .= "</div>";
       return $output;

    A questo punto ho cominciato a studiare un po' come funziona JavaScript con l'uso della libreria jQuery.
    Per un pivello come me in programmazione web, devo dire che JQuery è stato fantastico.
    In poche parole ho fatto uso delle funzioni seguenti:
      $.getJSON(url, function(data){
      $.each(data.results, GestioneTweets);
        });

    La funzione Gestione tweet è stata molto laboriosa ma divertente.
    L' idea di base è quella di gestire in modo dinamico dei tweets, attraverso lo sviluppo di una funzione
    “Gestione Tweet”, in un array, dimensionato con la nostra variabile “limit”, con politica “First
    In First Out”, 'shiftando' via via i tweet vecchi per far posto ai nuovi tweets e facendo uso di una
    variabile “ID” per indicizzare i vari tweets assegnati al tag , quest'ultimo recentemente
    introdotto con HTML5.
    Per dare tempo alla lettura dei Tweet, l'aggiunta di uno nuovo verra temporeggiato attraverso l'uso
    della funzione setTimeout all'interno della quale verra richiamata una “.SlideDown” .
    Il tempo di ritardo verrà inizializzato in base alla velocità di animazione, denominata “ANIM_SPEED”,
    e quindi settato in base anche all'id che viene assegnato al tweet e tenendo conto del numero di
    'articoli da visualizzare'.
    Per fare ciò, ci viene in aiuto ancora jQuery tramite la manipolazione dei DOM (Document Object
    Model), in particolare si è fatto uso della funzione “.prepend” per allegare il contenuto, recuperato
    dalla richiesta AJAX, nel nostro “” dichiarato all'interno della nostra funzione block_content(lato server).
    Spero di essermi spiegato sufficientemente e chiarirei eventuali dettagli (aiuterebbe anche me;-)).
    La seconda parte del mio progetto sarà eseguita in laboratorio per fortuna con l'aiuto di altri...
    Ringrazio tutti per l'appoggio e in particolare Pinolo per le dritte iniziali.

    Vorrei precisare che le api di twitter sono passate alla versione 1.1 e quindi l'esempio sopra non funziona più.
    Ora c'è bisogno dell'utilizzo del protocollo OAuth.
    Se qualcuno ha bisogno di informazioni potra contattarmi e sarò lieto di aiutarlo..grazie a tutti per l'aiuto.