<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=La_API_de_Dropbox</id>
	<title>La API de Dropbox - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=La_API_de_Dropbox"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=La_API_de_Dropbox&amp;action=history"/>
	<updated>2026-08-30T10:01:36Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=La_API_de_Dropbox&amp;diff=253130&amp;oldid=prev</id>
		<title>Joan: /* Script administratiu cronificat. Exemple */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=La_API_de_Dropbox&amp;diff=253130&amp;oldid=prev"/>
		<updated>2015-02-23T19:16:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Script administratiu cronificat. Exemple&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Introducció=&lt;br /&gt;
Avui en dia és habitual fer còpies de seguretat al núvol i compartir la informació. Per exemple, serveis al núvol que ofereixen força espai de disc al núvol de forma gratuïta:&lt;br /&gt;
*Dropbox: https://www.dropbox.com/&lt;br /&gt;
*ownCloud: https://owncloud.com/&lt;br /&gt;
*Copy: https://www.copy.com/home/&lt;br /&gt;
*Box: https://www.box.com/ &lt;br /&gt;
 &lt;br /&gt;
Volem accedir al '''Dropbox''' des de la seva API. És a dir, volem programar scripts per accedir al Dropbox (típicament: pujar fitxers, descarregar fitxers, llistar contingut de carpetes). El primer de tot, tenir un compte de dropbox. Si no el tens, ara és el moment de fer-ho.&lt;br /&gt;
*https://www.dropbox.com/developers/core&lt;br /&gt;
&lt;br /&gt;
=API de Dropbox. PHP=&lt;br /&gt;
*https://www.dropbox.com/developers/core/start/php&lt;br /&gt;
Hem de registrar una aplicació a la App Console. Necessitarem la '''app key''' per accedir a la '''Core API'''. Després haurem d'instal.lar el SDK per al llenguatge seleccionat (en el nostre cas, PHP SDK).&lt;br /&gt;
&lt;br /&gt;
Hem de crear una nova aplicació:&lt;br /&gt;
*https://www.dropbox.com/developers/apps&lt;br /&gt;
I contestar les preguntes que ens van fent:&lt;br /&gt;
*Escollim una Dropbox API app. &lt;br /&gt;
&lt;br /&gt;
*What type of data does your app need to store on Dropbox?&lt;br /&gt;
Escollim Files and datastores&lt;br /&gt;
&lt;br /&gt;
*Can your app be limited to its own folder?&lt;br /&gt;
No My app needs access to files already on Dropbox.&lt;br /&gt;
&lt;br /&gt;
*What type of files does your app need access to?&lt;br /&gt;
Specific file types My app only needs access to certain file types, like text or photos.&lt;br /&gt;
&lt;br /&gt;
Farem que la nostra aplicació només tingui accés a fitxers de text.&lt;br /&gt;
&lt;br /&gt;
*Last question, what type of files will your app use?&lt;br /&gt;
Text files TXT, Markdown, Code files, HTML, etc.&lt;br /&gt;
&lt;br /&gt;
*Provide an app name, and you're on your way.&lt;br /&gt;
prova1_api (escull el nom de la app que creguis convenient)&lt;br /&gt;
&lt;br /&gt;
I ara ja tenim la url de la nostra interface de desenvolupament d'aplicacions per a la API de Drobox. Per exemple, en el cas del professor:&lt;br /&gt;
*https://www.dropbox.com/developers/apps/info/fqih5rcf32yak2l&lt;br /&gt;
&lt;br /&gt;
Hem d'obtenir les credencials. En el cas del professor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
App key: fqih5rcf32yak2l&lt;br /&gt;
App secret: pyt7dcqu0cgz1l8&lt;br /&gt;
&lt;br /&gt;
Generate access token: rqDdcful8VMAAAAAAAAAPqRyGCCjH5v5Zoju1nZhs4Do4RcYKu6FTAVmrFshzvuu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTA''': És important el valor del ''access token'' generat, doncs és un ''access token'' comodí que farem servir després per poder executar els nostres scripts amb autenticació automatitzada.&lt;br /&gt;
&lt;br /&gt;
Si anem a core API tenim tutorials i documentació per als diferents llenguatges de programació:&lt;br /&gt;
*https://www.dropbox.com/developers/core&lt;br /&gt;
Podem fer scripts per als següents llenguatges:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PHP&lt;br /&gt;
Python&lt;br /&gt;
Ruby&lt;br /&gt;
Java&lt;br /&gt;
iOS&lt;br /&gt;
OS X&lt;br /&gt;
HTTP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are also a number of third-party libraries maintained by the developer community.&lt;br /&gt;
&lt;br /&gt;
I ara seguim el tutorial de PHP:&lt;br /&gt;
*https://www.dropbox.com/developers/core/start/php&lt;br /&gt;
&lt;br /&gt;
El primer que hem de fer és instal.lar el PHP SDK:&lt;br /&gt;
*https://www.dropbox.com/developers/core/sdks/php&lt;br /&gt;
Descarreguem ''dropbox-sdk-php-1.1.4.zip'' i descomprimim. I llegim:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The SDK is contained in the lib/ folder in the zip file so copy lib/ into your project and name it dropbox-sdk/ and include it in your app:&lt;br /&gt;
&lt;br /&gt;
require_once &amp;quot;dropbox-sdk/Dropbox/autoload.php&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Per tant, si hem llegit bé, hem de copiar la carpeta ''lib/'' a un directori que es digui ''dropbox-sdk/'', i  aquesta carpeta estarà en l'arrel d'on tindrem els nostres scripts.&lt;br /&gt;
&lt;br /&gt;
Dit d'una altra manera, la carpeta que contingui els nostres scripts PHP contindrà una carpeta que es dirà ''dropbox-sdk/'', i aquesta carpeta té el mateix contingut que lib/&lt;br /&gt;
&lt;br /&gt;
Si continuem mirant el codi, ara cal fer la configuració de l'autenticació. Canviem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$appInfo = dbx\AppInfo::loadFromJsonFile(&amp;quot;INSERT_PATH_TO_JSON_CONFIG_PATH&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
per &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$appInfo = dbx\AppInfo::loadFromJsonFile(&amp;quot;config.json&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i en el fitxer config.json posarem les nostres credencials:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;key&amp;quot;: &amp;quot;INSERT_APP_KEY&amp;quot;,&lt;br /&gt;
  &amp;quot;secret&amp;quot;: &amp;quot;INSERT_SECRET&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En el cas del professor (no podeu utilitzar aquestes credencials):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;key&amp;quot;: &amp;quot;fqih5rcf32yak2l&amp;quot;,&lt;br /&gt;
  &amp;quot;secret&amp;quot;: &amp;quot;pyt7dcqu0cgz1l8&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Provem d'executar l'exemple: (recordem que estem en PHP en mode CLI, línia de comanda):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ php primer_exemple_dropbox.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
al professor li dóna l'error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Dropbox SDK uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fent una petita cerca per Internet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Just comment the following line in \lib\Dropbox\RequestUtil.php(line.no : 19)&lt;br /&gt;
&lt;br /&gt;
if (strlen((string) PHP_INT_MAX) &amp;lt; 19) {&lt;br /&gt;
//    // Looks like we're running on a 32-bit build of PHP.  This could cause problems because some of the numbers&lt;br /&gt;
//    // we use (file sizes, quota, etc) can be larger than 32-bit ints can handle.&lt;br /&gt;
   throw new \Exception(&amp;quot;The Dropbox SDK uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=&amp;quot; . ((string) PHP_INT_MAX) . &amp;quot;).  Library: \&amp;quot;&amp;quot; . __FILE__ . &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hem de comentar la línia que llença l'excepció, en el fitxer ''dropbox-sdk/Dropbox/RequestUtil.php''&lt;br /&gt;
&lt;br /&gt;
I ara ja funcionarà:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ php primer_exemple_dropbox.php&lt;br /&gt;
1. Go to: https://www.dropbox.com/1/oauth2/authorize?locale=&amp;amp;client_id=fqih5rcf32yak2l&amp;amp;response_type=code&lt;br /&gt;
2. Click &amp;quot;Allow&amp;quot; (you might have to log in first).&lt;br /&gt;
3. Copy the authorization code.&lt;br /&gt;
Enter the authorization code here: &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [referral_link] =&amp;gt; https://db.tt/iSr23qcS&lt;br /&gt;
    [display_name] =&amp;gt; Joan Quintana&lt;br /&gt;
    [uid] =&amp;gt; 329761&lt;br /&gt;
    [locale] =&amp;gt; es_ES&lt;br /&gt;
    [country] =&amp;gt; ES&lt;br /&gt;
    [team] =&amp;gt; &lt;br /&gt;
    [quota_info] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [datastores] =&amp;gt; 0&lt;br /&gt;
            [shared] =&amp;gt; 0&lt;br /&gt;
            [quota] =&amp;gt; 2147483648&lt;br /&gt;
            [normal] =&amp;gt; 189308719&lt;br /&gt;
...&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [rev] =&amp;gt; ce16e38000e6c76&lt;br /&gt;
    [thumb_exists] =&amp;gt; &lt;br /&gt;
    [path] =&amp;gt; /working-draft.txt&lt;br /&gt;
    [is_dir] =&amp;gt; &lt;br /&gt;
    [client_mtime] =&amp;gt; Fri, 20 Feb 2015 10:28:57 +0000&lt;br /&gt;
    [icon] =&amp;gt; page_white_text&lt;br /&gt;
    [read_only] =&amp;gt; &lt;br /&gt;
    [modifier] =&amp;gt; &lt;br /&gt;
    [bytes] =&amp;gt; 47&lt;br /&gt;
    [modified] =&amp;gt; Fri, 20 Feb 2015 10:28:56 +0000&lt;br /&gt;
    [size] =&amp;gt; 47 bytes&lt;br /&gt;
    [root] =&amp;gt; dropbox&lt;br /&gt;
    [mime_type] =&amp;gt; text/plain&lt;br /&gt;
    [revision] =&amp;gt; 216100408&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si hem mirat amb deteniment l'exemple que estem executant, fa tres coses:&lt;br /&gt;
*puja un fitxer.&lt;br /&gt;
*llista el contingut de la nostra arrel del Dropbox (/)&lt;br /&gt;
*descarrega un fitxer (de fet copia el contingut d'un fitxer en un altre que prèviament ha d'existir en el nostre ordinador local)&lt;br /&gt;
Ara podem anar al Dropbox i veure que efectivament hem pujat el fitxer&lt;br /&gt;
&lt;br /&gt;
Posem aquí una altra vegada el contingut del script '''primer_exemple_dropbox.php''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
# Include the Dropbox SDK libraries&lt;br /&gt;
require_once &amp;quot;dropbox-sdk/Dropbox/autoload.php&amp;quot;;&lt;br /&gt;
use \Dropbox as dbx;&lt;br /&gt;
&lt;br /&gt;
$appInfo = dbx\AppInfo::loadFromJsonFile(&amp;quot;config.json&amp;quot;);&lt;br /&gt;
$webAuth = new dbx\WebAuthNoRedirect($appInfo, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$authorizeUrl = $webAuth-&amp;gt;start();&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;1. Go to: &amp;quot; . $authorizeUrl . &amp;quot;\n&amp;quot;;&lt;br /&gt;
echo &amp;quot;2. Click \&amp;quot;Allow\&amp;quot; (you might have to log in first).\n&amp;quot;;&lt;br /&gt;
echo &amp;quot;3. Copy the authorization code.\n&amp;quot;;&lt;br /&gt;
$authCode = \trim(\readline(&amp;quot;Enter the authorization code here: &amp;quot;));&lt;br /&gt;
&lt;br /&gt;
list($accessToken, $dropboxUserId) = $webAuth-&amp;gt;finish($authCode);&lt;br /&gt;
print &amp;quot;Access Token: &amp;quot; . $accessToken . &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$dbxClient = new dbx\Client($accessToken, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
$accountInfo = $dbxClient-&amp;gt;getAccountInfo();&lt;br /&gt;
&lt;br /&gt;
print_r($accountInfo);&lt;br /&gt;
&lt;br /&gt;
$f = fopen(&amp;quot;working-draft.txt&amp;quot;, &amp;quot;rb&amp;quot;);&lt;br /&gt;
$result = $dbxClient-&amp;gt;uploadFile(&amp;quot;/working-draft.txt&amp;quot;, dbx\WriteMode::add(), $f);&lt;br /&gt;
fclose($f);&lt;br /&gt;
print_r($result);&lt;br /&gt;
&lt;br /&gt;
$folderMetadata = $dbxClient-&amp;gt;getMetadataWithChildren(&amp;quot;/&amp;quot;);&lt;br /&gt;
print_r($folderMetadata);&lt;br /&gt;
&lt;br /&gt;
$f = fopen(&amp;quot;working-draft.txt&amp;quot;, &amp;quot;w+b&amp;quot;);&lt;br /&gt;
$fileMetadata = $dbxClient-&amp;gt;getFile(&amp;quot;/working-draft.txt&amp;quot;, $f);&lt;br /&gt;
fclose($f);&lt;br /&gt;
print_r($fileMetadata);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Autenticació automàtica oauth=&lt;br /&gt;
El procés d'autenticació anterior era molt engorrós: havíem de visitar una URL que ens proporcionava un ''authentication code'' que podem utilitzar. Si volem que aquest procés d'autenticació sigui automàtic la cosa està fàcil, només cal enrecordar-nos del ''authentication code'' que hem obtingut en generar l'aplicació, i posar-lo en el nostre codi. En el script ficarem: (fica el teu valor)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$accessToken = &amp;quot;rqDdcful8VMAAAAAAAAAUtpRna8_iipCFDWI0koOlTMqkF1pXNt4iFs_IDN4R-03&amp;quot;;&lt;br /&gt;
$dbxClient = new dbx\Client($accessToken, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''primer_exemple_dropbox_v2.php''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
# Include the Dropbox SDK libraries&lt;br /&gt;
require_once &amp;quot;dropbox-sdk/Dropbox/autoload.php&amp;quot;;&lt;br /&gt;
use \Dropbox as dbx;&lt;br /&gt;
&lt;br /&gt;
$appInfo = dbx\AppInfo::loadFromJsonFile(&amp;quot;config.json&amp;quot;);&lt;br /&gt;
$webAuth = new dbx\WebAuthNoRedirect($appInfo, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$authorizeUrl = $webAuth-&amp;gt;start();&lt;br /&gt;
&lt;br /&gt;
$accessToken = &amp;quot;rqDdcful8VMAAAAAAAAAUtpRna8_iipCFDWI0koOlTMqkF1pXNt4iFs_IDN4R-03&amp;quot;;&lt;br /&gt;
$dbxClient = new dbx\Client($accessToken, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
$accountInfo = $dbxClient-&amp;gt;getAccountInfo();&lt;br /&gt;
print_r($accountInfo);&lt;br /&gt;
&lt;br /&gt;
$f = fopen(&amp;quot;el_meu_fitxer.txt&amp;quot;, &amp;quot;rb&amp;quot;);&lt;br /&gt;
$result = $dbxClient-&amp;gt;uploadFile(&amp;quot;/Public/el_meu_fitxer.txt&amp;quot;, dbx\WriteMode::add(), $f);&lt;br /&gt;
fclose($f);&lt;br /&gt;
print_r($result);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Això és important, doncs ara podem fer scripts automàtics i cronificats. Per exemple, podem fer una còpia de bases de dades i enviar-la al Dropbox.&lt;br /&gt;
&lt;br /&gt;
=API de Dropbox. Python=&lt;br /&gt;
La idea és la mateixa que amb PHP. La info està a:&lt;br /&gt;
*https://www.dropbox.com/developers/core/start/python&lt;br /&gt;
Primer hem d'instal.lar el Python SDK:&lt;br /&gt;
*https://www.dropbox.com/developers/core/sdks/python&lt;br /&gt;
Descarreguem ''dropbox-python-sdk-2.2.0.zip'', descomprimim i instal.lem.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd dropbox-python-sdk-2.2.0&lt;br /&gt;
$ sudo python setup.py install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Primer haurem de fer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install python-setuptools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python primer_exemple_dropbox.py&lt;br /&gt;
1. Go to: https://www.dropbox.com/1/oauth2/authorize?response_type=code&amp;amp;client_id=fqih5rcf32yak2l&lt;br /&gt;
2. Click &amp;quot;Allow&amp;quot; (you might have to log in first)&lt;br /&gt;
3. Copy the authorization code.&lt;br /&gt;
Enter the authorization code here:&lt;br /&gt;
&lt;br /&gt;
linked account:  {u'referral_link': u'https://db.tt/iSr23qcS', u'display_name': u'Joan Quintana', u'uid': 329761, u'email_verified': True, u'locale': u'es_ES', u'country': u'ES', u'email': u'joanqc@gmail.com'&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Script '''primer_exemple_dropbox.py'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Include the Dropbox SDK&lt;br /&gt;
import dropbox&lt;br /&gt;
&lt;br /&gt;
# Get your app key and secret from the Dropbox developer website&lt;br /&gt;
app_key = 'INSERT_APP_KEY'&lt;br /&gt;
app_secret = 'INSERT_APP_SECRET'&lt;br /&gt;
&lt;br /&gt;
//app_key = 'fqih5rcf32yak2l'&lt;br /&gt;
//app_secret = 'pyt7dcqu0cgz1l8'&lt;br /&gt;
&lt;br /&gt;
flow = dropbox.client.DropboxOAuth2FlowNoRedirect(app_key, app_secret)&lt;br /&gt;
&lt;br /&gt;
# Have the user sign in and authorize this token&lt;br /&gt;
authorize_url = flow.start()&lt;br /&gt;
print '1. Go to: ' + authorize_url&lt;br /&gt;
print '2. Click &amp;quot;Allow&amp;quot; (you might have to log in first)'&lt;br /&gt;
print '3. Copy the authorization code.'&lt;br /&gt;
code = raw_input(&amp;quot;Enter the authorization code here: &amp;quot;).strip()&lt;br /&gt;
&lt;br /&gt;
# This will fail if the user enters an invalid authorization code&lt;br /&gt;
access_token, user_id = flow.finish(code)&lt;br /&gt;
&lt;br /&gt;
client = dropbox.client.DropboxClient(access_token)&lt;br /&gt;
print 'linked account: ', client.account_info()&lt;br /&gt;
&lt;br /&gt;
f = open('working-draft.txt', 'rb')&lt;br /&gt;
response = client.put_file('/magnum-opus.txt', f)&lt;br /&gt;
print 'uploaded: ', response&lt;br /&gt;
&lt;br /&gt;
folder_metadata = client.metadata('/')&lt;br /&gt;
print 'metadata: ', folder_metadata&lt;br /&gt;
&lt;br /&gt;
f, metadata = client.get_file_and_metadata('/magnum-opus.txt')&lt;br /&gt;
out = open('magnum-opus.txt', 'wb')&lt;br /&gt;
out.write(f.read())&lt;br /&gt;
out.close()&lt;br /&gt;
print metadata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si ens fixem bé en el codi, estem obrint el fitxer ''working-draft.txt'' en mode lectura, i pugem el seu contingut al dropbox amb el nom de ''magnum-opus.txt''. Després llistem el contingut de l'arrel del Dropbox (/), i finalment descarreguem a l'ordinador local el fitxer ''magnum-opus.txt''.&lt;br /&gt;
&lt;br /&gt;
=Script administratiu cronificat. Exemple=&lt;br /&gt;
[[Fitxer:Logs script.jpg | thumbnail]]&lt;br /&gt;
Com a administradors de sistema, tenim scripts que s'executen de forma desatesa i que realitzen diferents tasques administratives. Pot ser interessant que el resultat d'aquests scripts (per ex, els log i fitxers generats) es puguin penjar al núvol. Entre d'altres, els avantatges de tenir-ho al núvol:&lt;br /&gt;
*No cal preocupar-se de les còpies de seguretat.&lt;br /&gt;
*És fàcil compartir els fitxers amb el nostre equip de treball.&lt;br /&gt;
Anem a posar un exemple sencer.&lt;br /&gt;
&lt;br /&gt;
Volem executar un script administratiu que realitzarà dues tasques:&lt;br /&gt;
*comprovar que la IP 192.168.0.15 estigui aixecada&lt;br /&gt;
*fer un resum de l'espai del disc dur local.&lt;br /&gt;
El resultat d'aquest test es guardarà en un ''log'', i s'enviarà el ''log'' al Dropbox un cop al dia.&lt;br /&gt;
&lt;br /&gt;
D'una banda tenim el script bash, que farà el ''ping'', la comanda ''df'', i farà la crida al script ''php'':&lt;br /&gt;
&lt;br /&gt;
script '''script_admin.sh''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
tdate=`date +%d%m%y`&lt;br /&gt;
ruta=/home/joan/M09_IAW_1415/dropbox&lt;br /&gt;
ruta_logs=/home/joan/M09_IAW_1415/dropbox/logs&lt;br /&gt;
&lt;br /&gt;
/bin/echo &amp;quot;Màquina 192.168.0.15:&amp;quot; &amp;gt; $ruta_logs/ping_$tdate.txt&lt;br /&gt;
/bin/ping -c 3 192.168.0.15 &amp;gt;&amp;gt; $ruta_logs/ping_$tdate.txt&lt;br /&gt;
&lt;br /&gt;
/bin/echo &amp;gt;&amp;gt; $ruta_logs/ping_$tdate.txt&lt;br /&gt;
/bin/echo &amp;quot;Espai de disc del nostre disc dur:&amp;quot; &amp;gt;&amp;gt; $ruta_logs/ping_$tdate.txt&lt;br /&gt;
/bin/df -h &amp;gt;&amp;gt; $ruta_logs/ping_$tdate.txt&lt;br /&gt;
&lt;br /&gt;
/bin/echo $ruta_logs/ping_$tdate.txt&lt;br /&gt;
/usr/bin/php $ruta/enviar_log_a_dropbox.php ping_$tdate.txt&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Fixem-nos bé que hem de crear la carpeta ''logs/'' en el nostre directori de treball, que d'altra banda és hem estat ficant els nostres scripts PHP anteriors).&lt;br /&gt;
&lt;br /&gt;
El script '''enviar_log_a_dropbox.php''' està basat en les proves que hem estat fent (només interessa la part del upload), i si ens fixem bé rep un argument que és el nom del log. El log en realitat té extensió ''.txt'', doncs això ens facilita la seva lectura des de dins del Dropbox.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//passar arguments a un script PHP:&lt;br /&gt;
//http://php.net/manual/en/reserved.variables.argv.php&lt;br /&gt;
//var_dump($argv);&lt;br /&gt;
$ruta = &amp;quot;/home/joan/M09_IAW_1415/dropbox/&amp;quot;;&lt;br /&gt;
$ruta_logs = &amp;quot;/home/joan/M09_IAW_1415/dropbox/logs/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//$ruta .= &amp;quot;/&amp;quot;;&lt;br /&gt;
$fitxer_log = $argv[1];&lt;br /&gt;
echo $fitxer_log.&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Include the Dropbox SDK libraries&lt;br /&gt;
require_once $ruta . &amp;quot;dropbox-sdk/Dropbox/autoload.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
use \Dropbox as dbx;&lt;br /&gt;
&lt;br /&gt;
$appInfo = dbx\AppInfo::loadFromJsonFile($ruta . &amp;quot;config.json&amp;quot;);&lt;br /&gt;
$webAuth = new dbx\WebAuthNoRedirect($appInfo, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$authorizeUrl = $webAuth-&amp;gt;start();&lt;br /&gt;
&lt;br /&gt;
$accessToken = &amp;quot;rqDdcful8VMAAAAAAAAAUtpRna8_iipCFDWI0koOlTMqkF1pXNt4iFs_IDN4R-03&amp;quot;;&lt;br /&gt;
$dbxClient = new dbx\Client($accessToken, &amp;quot;PHP-Example/1.0&amp;quot;);&lt;br /&gt;
$accountInfo = $dbxClient-&amp;gt;getAccountInfo();&lt;br /&gt;
//print_r($accountInfo);&lt;br /&gt;
&lt;br /&gt;
$f = fopen($ruta_logs . $fitxer_log, &amp;quot;rb&amp;quot;);&lt;br /&gt;
$result = $dbxClient-&amp;gt;uploadFile(&amp;quot;/Public/logs/$fitxer_log&amp;quot;, dbx\WriteMode::add(), $f);&lt;br /&gt;
fclose($f);&lt;br /&gt;
print_r($result);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si executem el script hauria de funcionar (recorda posar sempre les teves dades):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./script_admin.sh logs/ping_230215.txtArray&lt;br /&gt;
(&lt;br /&gt;
    [revision] =&amp;gt; 216100435&lt;br /&gt;
    [bytes] =&amp;gt; 720&lt;br /&gt;
    [thumb_exists] =&amp;gt; &lt;br /&gt;
    [rev] =&amp;gt; ce16e53000e6c76&lt;br /&gt;
    [modified] =&amp;gt; Mon, 23 Feb 2015 16:19:59 +0000&lt;br /&gt;
    [shareable] =&amp;gt; &lt;br /&gt;
    [mime_type] =&amp;gt; text/plain&lt;br /&gt;
    [path] =&amp;gt; /Public/logs/ping_230215 (2).txt&lt;br /&gt;
    [is_dir] =&amp;gt; &lt;br /&gt;
    [size] =&amp;gt; 720 bytes&lt;br /&gt;
    [root] =&amp;gt; dropbox&lt;br /&gt;
    [client_mtime] =&amp;gt; Mon, 23 Feb 2015 16:19:59 +0000&lt;br /&gt;
    [icon] =&amp;gt; page_white_text&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I ara fiquem aquest script dins del cron. Per provar, podem fer que s'executi cada minut:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo joe /etc/crontab&lt;br /&gt;
*/1 * * * * root /home/joan/M09_IAW_1415/dropbox/script_admin.sh&lt;br /&gt;
$ sudo /etc/init.d/cron restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTA'''. Fixem-nos bé que tant el script bash com el php tenen '''TOTES''' les rutes del fitxer absolutes. Això és important quan hem de llençar el script des del cron.&lt;br /&gt;
&lt;br /&gt;
=Feina per l'alumne=&lt;br /&gt;
Els alumnes realitzaran tots els exercicis fets a classe, solucionant els possibles problemes que vagin sortint. Concretament, s'ha de realitzar el bash script (que cerca la IP i fa el df), i configurar el cron per tal de què s'executi de forma automàtica.&lt;br /&gt;
&lt;br /&gt;
*''Opcional''. Un cop funcioni, des del bash script es cridarà a una versió del script ''enviar_log_a_dropbox.php'' feta amb Python.&lt;br /&gt;
*''Opcional''. També es valorarà de forma positiva millores en el script i cercar la utilitat i justificació en la feina diària dels administradors de sistema.&lt;br /&gt;
&lt;br /&gt;
=Entrega=&lt;br /&gt;
Els alumnes entregaran al Schoology tots els fitxers generats. S'empaquetaran tots aquests fitxers i es pujaran al Schoology dins del termini d'entrega de la pràctica.&lt;br /&gt;
&lt;br /&gt;
Recorda la '''normativa''' per entregar les pràctiques al Schoology: [[ASIX-M10-UF2#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Schoology]]&lt;br /&gt;
{{Autor}}, febrer 2015&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>