Modul som "cachar" tweets

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
pixelpiloten's picture

Hallå där Drupalsverige, jag har under några semester-dagar suttit och gjort en modul som sparar tweets från ett twitter-konto i drupals db vid varje cron.

Tanken bakom denna modul uppkom när jag satt och byggt en liknande modul för en kunds räkning och twitter stängde ner sitt gamla API och modulen helt slutade fungera, den hämtade då tweets direkt från API't varje gång den specifika sidan visades.

Denna modul använder twitters nya API och hämtar som sagt tweets vid varje cron och sparar i Drupals databas och listar dessa i ett block som man kan aktivera.

Det är mitt första projekt jag laddat upp på drupal.org och är än sålänge bara en sandbox, men ni får gärna ladda ner och testa den och uppskattar gärna kommentarer på vad som kan ändras, buggar, säkerhetsissues m.m :)

Här är en länk till sidan där ni kan clona ner repot:
https://drupal.org/project/2036687/git-instructions

Comments

Kanon! Satt för ngr dagar sen

HansRoberto's picture

Kanon! Satt för ngr dagar sen och önskade nån kunde göra en sån modul! ^.^
Ser fram emot att testa den!

Det finns redan en modul som

acke's picture

Det finns redan en modul som gör detta, kolla in: https://drupal.org/project/twitter_db

--
Happiness - www.happiness.se

Kul! Har tittat lite snabbt

pontus_nilsson's picture

Kul! Har tittat lite snabbt på koden,

twittercache_variables() verkar vara onödigt. Just nu slår också funktionen mot databasen i varje funktionsanrop (cacha). Inställningarna för modulen hade jag lagt i variabler istället (variable_get(), variable_set()). De blir då exporterbara genom Features och strongarm (samt cachade). Alternativt så kan du titta på Ctools exportables. Men i detta fall så är nog variabler vägen att gå.

TwitterAPIExchange.php kan du titta på att inkludera via modulen Libraries istället. Libraries är ett att inludera externa bibliotek på ett gemensamt sätt i Drupal. Så TwitterAPIExchange separeras från modulen, lever på sin egna plats i filstrukturen och kan användas av flera moduler utan att få krock ifall flera moduler inluderar sin egna TwitterAPIExchange.

Koden rörande hook_menu kan kortas ned:

/
* Here we implemment hook_menu() so we can create a custom page in the admin-
* section in the site where the user will be able to edit the twittercache-
* settings.
*/
function twittercache_menu() {
  $items = array();
  $items['admin/structure/twittercache'] = array(
    'title' => 'Twittercache',
    'description' => 'Configure what twitter-handle you want to display tweets from and how many.',
    'page callback' => 'twitterchache_configpage',
    'access arguments' => array('administer twittercache'),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

/

* Here is the page-callback for the hook_menu() for the page were the user can
* change the twittercahce-settings, in this case we render a hook_form().
* @return [type]
*/
function twitterchache_configpage() {
  $form = drupal_get_form('twittercache_config_form');
  return $form;
}

Till bara

function twittercache_menu() {
  $items = array();
  $items['admin/structure/twittercache'] = array(
    'title' => 'Twittercache',
    'description' => 'Configure what twitter-handle you want to display tweets from and how many.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('twittercache_config_form'),
    'access arguments' => array('administer twittercache'),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

Angående formuläret: om du väljer att spara ner konfigurationen i variabler istället så kan du använda system_settings_form.
I slutet av twittercache_config_form så använder du nu return $form;. Ifall du istället använde return system_settings_form($form); så kommer varje formulärelement, t.ex. $form['handle'] sparas i en variabel som heter "handle". Du slipper med andra ord ta hand om form_submit om du inte vill göra något förutom att spara formulärelementens data till variabler. Ifall du går denna väg så är det bra att döpa formulärelementen till twittercache_handle t.ex. så variablernas namn går att härleda till din modul.

Liknande funktionalitet finns i modulen Twitter pull, kanske gå med i utvecklingen där? :)

Något du också kan titta på ifall du vill göra modulen publik senare är Drupals standard för kommentarer. T.ex.

/
* Here we implemment hook_menu() so we can create a custom page in the admin-
* section in the site where the user will be able to edit the twittercache-
* settings.
*/

Brukar bara förkortas med
/
* Implements hook_menu().
*/

Lycka till och kul projekt!

//Pontus Nilsson, Digitalist

Ihopslagning av hook_menu och kommentarsformat

pixelpiloten's picture

Angående twittercache_menu():
Jo funktionen såg ut så från början och använde drupal_get_form där direkt, men sen tänkte jag att jag kanske ville lägga till text, visa senaste cachade tweetsen eller liknande också på den sidan, så därför fick de bli en egen funktion:)

Angående kommentarsformat:
Ska man aldrig skriva mer än vad man implementerar för hook?
Eller va det mer att man ska skriva "Implements hook_menu()." istället för "Here we implemment hook_menu()....".

Ang. globala variabler och TwitterAPIExchange

pixelpiloten's picture

Båda de här sakerna står på min lista av att göra saker, visste dock inte att de kunde exporteras med features och strongarm, är ju fett smidigt, är stor användare av features så vore ju super att få sån funktionalitet.

Vet du om man fortfarande använda egna submit/validate-funktioner med system_settings_form()?

Tänkte ifall man behöver ändra eller filtrera formulärsdatan eller så?

Ja du kan lägga till dina

pontus_nilsson's picture

Ja du kan lägga till dina egna submit och validate funktioner (hook_submit och hook_validate fungerar likadant med system_settings_form). Du kan ju validera och filtrera i validate-funktionen om du vill.

Kanske vill du också lägga till configure = admin/structure/twittercache till din .info-fil så får du ett trevligt kugghjul bredvid modulens namn i modullistan så man direkt kommer till inställningarna för modulen :)

//Pontus Nilsson, Digitalist

Tack för feedback

pixelpiloten's picture

Hallå igen, jag har använt Twitter DB tidigare och det va den modulen som slutade fungera, och jag laddade ner rc1 men fick den inte heller att fungera, det va ett rätt stressigt projekt jag körde den på och hade redan lite baskod för en egen twitter-modul så blev att jag implementerade det istället för att kolla vidare i issue-kön.

Twitter Pull vet jag att jag kollade på också men som med Twitter DB så stod det i båda liknande text "..this module may CEASE TO FUNCTION with the new api" och då fick jag vibbar om att utvecklingen av de modulerna kanske stagnerat.

Har dock inte kollat in de här modulerna efter det så nu kan det mycket väl vara så att de har uppdaterats å fungerar perfa.

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week