My You Tube channel

Stavo cercando di concludere questa serie di articoli, dedicata alle varie possibilità di integrazione di Joomla con i social network, dando uno sguardo anche ad un diverso modo dal semplice embedding. Qualcosa che possa essere propedeutico allo sviluppo di un estensione più completa che integri totalmente la gestione del social network in oggetto e, come sempre, cercando di utilizzare il più possibile ciò che Joomla già offre senza andare a scopiazzare codice quà e là per infilarlo in un goffo mvc.

L'unico posto dove può esistere qualcosa di simile è la directory /libraries/joomla,.... se qualcuno ce lo ha messo tra una versione e l'altra e, magia magia, c'è! C'è una libreria per Twitter, ce n'è una per Google, una per Linkedin e le altre le lascio scoprire a chi è interessato. L'unica cosa che manca è come sempre un po' di documentazione o "modi d'uso".

Si lo so, se sai sviluppare sai leggere le classi e il documentor e dovrebbe bastarti, ma da Joomla e dalla sua comunità mi aspetterei qualcosina in più così da invogliare a provare, sperimentare con una guida corretta anche chi è un po' alle prime armi anche con lo sviluppo. Questo è anche lo scopo di queste poche righe per cui non è un estensione da utilizzare su un sito di produzione, ma è un codice che può avere il suo posto tra le cartelle di Joomla per vedere cosa succede e capire come funziona. Poche righe perchè capire il principio di funzionamento è abbastanza semplice, poi le implementazioni funzionali dipenderanno dalla voglia che avrete di studiarvi le API dei vari social e ovviamente il corretto sviluppo di un estensione Joomla. Di queste ultime due cose la documentazione è sufficiente.

Per andare subito al nocciolo del discorso, dalla versione 3.x, vengono inserite nelle librerie di Joomla delle classi frutto del lavoro di appassionati sviluppatori e accettate dal team di sviluppo, come ad esempio la classe per l'uso dei microdati e ovviamente quelle in questione.
Resto nell'esempio con Twitter visto che è già presente un articolo Twitter embedded timelines, lasciandovi poi in compagnia di una gradevole signorina che vi spiegherà il resto... molto più succintamente di quanto farò io ma con un risultato altrettanto chiaro, una volta chiariti i prerequisiti e costruito un "banco di prova".

I prerequisiti per riuscire a comunicare con le (nuove) API di Twitter, qualunque accrocchio voi realizziate, sono sempre gli stessi già descritti nell'articolo dell'embedding, ovvero:

  • autenticarsi su apps.twitter.com con il proprio account Twitter (non occorre uno da sviluppatore).
  • Cliccate su "Create New "
  • Inserite il nome, la descrizione, l'url dell'applicazione (al momento può essere quello dell' hp) e il callback url (*)
  • Accette le regole/disclaimer proposte e create l'applicazione

(*) Il callback url può essere lasciato in bianco ma esponete la vostra applicazione ad una vulnerabilità che troverete anche su altre api di social network che usano OAuth2.0 o OpenID, dal nome: Covert Redirect

Ora che l'applicazione è creata vi verrà chiesto un minimo di configurazione. E' tutto abbastanza comprensibile per cui non mi dilungo, l'unica parte rilevante è quella dei token, che saranno più o meno necessari in dipendenza dalle funzionalità della vostra estensione, dal suo livello di iterazione e quindi di necessità di sicurezza; per leggere l'ultimo tweet il token è obsoleto (imho).

I parametri che basilarmente ci possono interessare sono:

  • API key
  • API secret
  • Owner
  • Owner ID

Dicevamo... prerequisiti e banco di prova, i primi li abbiamo visti, ottenere i valori quì sopra da inserire nel nostro codice, il banco prova sarà ovviamente un sito locale o online usato per test e che non causi problemi di sicurezza. Per avere qualcosa di visivo ricorro ad un "quick&dirty" che mi permetta di installare il codice come un estensione, avendone una gestione amministrativa) pur sviluppando solo in un file, poi ci penserete voi a farlo diventare ciò che vorrete.

Uso la struttura di un modulo che è il "minimo sindacale" per un estensione, costruendo una cartella mod_socialnetwork, con all'interno:

  • mod_socialnetwork.php
  • mod_socialnetwork.xml
  • index.html
  • /tmpl
    • default.php
    • index.html

I files all'interno di /tmpl per ora resteranno vuoti in quanto il risultato lo stamperete a video con un semplice print(). Anche l'aspetto grafico dipenderà da cosa vorrete visualizzare; scegliendo un modulo sarà ovviamente qualcosa di statico, chessò .. gli ultimi tweets, gli amici. Per maggior interazione sarà necessario un componente.

Quindi ci occuperemo di scrivere qualcosa solo nei due files mod_socialnetwork .xml e .php, iniziamo col primo...

mod_socialnetwork.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="module"
    version="3.3"
    client="site"
    method="upgrade"
    >
    <name>mod_socialnetwork</name>
    <author>Spazioalchimia</author>
    <creationDate>Agosto 2014</creationDate>
    <copyright>Copyright (C) 2014 - 2019 Spazioalchimia</copyright>
    <license>GNU General Public License version 2 or later</license>
    <authorEmail>Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.</authorEmail>
    <authorUrl>www.spazioalchimia.it</authorUrl>
    <version>0.0</version>
    <description>Modulo test classi network</description>
    <files>
            <filename module="mod_socialnetwork">mod_socialnetwork.php</filename>
            <folder>tmpl</folder>
            <filename>index.html</filename>
            <filename>mod_socialnetwork.xml</filename>
    </files>

    <config>
        <fields name="params">
<!-- quì i vostri parametri key, id etc.
            <fieldset name="IL_TUO_FIELDSET">
                <field name="TUO_NOME_PARAMETRO"
                    type="TIPO_CAMPO"
                    default=""
                    label="MOD_SOCIALNETWORK_LABEL"
                    description="MOD_SOCIALNETWORK_DESC"
                    />
            </fieldset>
-->          
            <fieldset name="advanced">
                <field name="layout"
                    type="modulelayout"
                    label="JFIELD_ALT_LAYOUT_LABEL"
                    description="JFIELD_ALT_MODULE_LAYOUT_DESC"
                    />
                <field name="moduleclass_sfx"
                    type="textarea"
                    rows="3"
                    label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
                    description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC"
                    />
                <field name="cache"
                    type="list"
                    default="1"
                    label="COM_MODULES_FIELD_CACHING_LABEL"
                    description="COM_MODULES_FIELD_CACHING_DESC"
                    >
                    <option value="1">JGLOBAL_USE_GLOBAL</option>
                    <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
                </field>

                <field name="cache_time"
                    type="text"
                    default="900"
                    label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
                    description="COM_MODULES_FIELD_CACHE_TIME_DESC"
                    />
                <field name="cachemode"
                    type="hidden"
                    default="static">
                    <option value="static"></option>
                </field>
            </fieldset>
        </fields>
    </config>
</extension>

mod_socialnetwork.php

<?php

defined('_JEXEC') or die;

// Maximise error reporting.(ONLY IN TEST)
error_reporting(E_ALL);
ini_set('display_errors', 1);

$ckey = 'SPfgulwAHA6oE0hqLkywtjheu'; // Key non funzionante
$csecret = 'TYCAQKQyhAacs6WFUS6JN5FUjSBCaEtIPAqTyeiAUsQ8h2HBHN'; // secret non funzionante

// il callback è questo file
$callback=JUri::current();

// Uso il registry di Joomla per ottenere un oggetto usabile anche con Json
$options = new JRegistry;
$options->set('consumer_key', $ckey);
$options->set('consumer_secret', $csecret);
$options->set('callback', $callback);
$options->set('sendheaders', true);

// Creo un oggetto autorizzazione...
$oauth = new JTwitterOAuth($options);
// ...ed eseguo l'autenticazione ottenendo un token (che poi non uso)
$new_token = $oauth->authenticate();

// ora posso creare un oggetto Twitter
$twitter = new JTwitter($oauth);
// ed accedere alle sue proprietà
$friends = $twitter->statuses;
// ottenendo una risposta alla mia richiesta di qualcosa        
$resp=$friends->getRetweetsOfMe();

print_r($resp);

Diciamo che questo è il principio di collegamento ed uso delle api joomla con quelle di twitter. La i metodi della classe ricalcano in pratica quelli delle api di cui trovate documentazione quì dev.twitter.com/docs/api/1.1. Con qualunque ide di sviluppo tipo Netbeans o Eclipse i metodi verranno elencati tramite documentor al momento in cui scrivete il codice, sono commentati e suggeriscono l'uso, più semplice di così.

Ma veniamo alla parte più bella ... la signorina carina! Quella che vi aiuterà a chiarire gli ultimi dubbi e non solo, espanderà la vostra conoscenza alle classi per Google e Linkedin, regalandovi anche dei corretti modi d'uso delle stesse all'interno dei vostri script.

Si chiama Diana Neculai e come si intuisce è Rumena, studentessa del terzo anno al Politecnico di Bucarest (...azz! un poco giovane..) e alla sua/e pagine github trovate gli script, buona lettura.

Multirotori

Multicopters I miei droni multirotore. Una semplice curiosità diventata una passione e qualcosa di più.
Il punto di incontro tra programmazione, volo, arduino, tecnica e manualità ...stimolante!
Consigli ed esperienze realizzative di vari modelli dedicati sia al divertimento che all'uso professionale.

Joomla

Joomla! Un Framework promettente ed un collaudato CMS che, con l'adeguata conoscenza, può diventare un avanzato strumento di lavoro.
Come si può conoscere uno strumento se non usandolo, sperimentando sempre nuove soluzioni e seguendo le sue problematiche di sicurezza?

Lifehacking

Lifehacking Non c'è oggetto per casa che non ho aperto, è maniacale ma non riesco a rinunciare, come se quelle quattro viti, quella fessura a scatto mi impedisse di conoscere, scoprire, imparare qualcosa, sigillandolo come un segreto.
Tutto può funzionare meglio o diventare più utile e versatile ...è Life Hacking!

Parapendio

Parapendio Volare è un po' come avere la possibilità di osservare le cose da un'altra prospettiva, senza i vincoli di una forza che ti costringe a muoverti come un pedone degli scacchi per le strade di una città. Il mio sogno sta nell'armadio, pronto a farmi evadere quando ne sento il bisogno e l'aria lo permette.