Programmation

Programmation (5)

lundi, 31 décembre 2018 12:31

PHP array en table

Écrit par


function array2table($array, $recursive = true, $null = ' ')
{ // Sanity check
if (empty($array) || !is_array($array)) {
return false;
}
if (!isset($array[0]) || !is_array($array[0]))
{
$array = array($array);
}
//Start the table
$table = '

'; // The header
$table .= "\t"; // Take the keys from the first row as the headings
foreach (array_keys($array[0]) as $heading) {
$table .= ''; } $table .= "\n"; // The body foreach ($array as $row) { $table .= "\t" ; foreach ($row as $cell) { $table .= ''; } $table .= "\n"; } $table .= '









' . $heading . '
'; // Cast objects if (is_object($cell)) { $cell = (array) $cell; } if ($recursive === true && is_array($cell) && !empty($cell)) { // Recursive mode $table .= "\n" . array2table($cell, true, true) . "\n"; } else { $table .= (strlen($cell) > 0) ? htmlspecialchars((string) $cell) : $null; } $table .= '

';
return $table;
}
print array2table($a);

 

 

 

function array2table($array, $recursive = true, $null = ' ')
{
   // Sanity check
   if (empty($array) || !is_array($array)) {
      return false;
}

if (!isset($array[0]) || !is_array($array[0])) {
   $array = array($array);
}

// Start the table
   $table = '<table>';

   // The header
   $table .= "\t<tr>";
   // Take the keys from the first row as the headings
   foreach (array_keys($array[0]) as $heading) {
      $table .= '<th>' . $heading . '</th>';
   }
   $table .= "</tr>\n";

   // The body
   foreach ($array as $row) {
      $table .= "\t<tr>" ;
      foreach ($row as $cell) {
         $table .= '<td>';

         // Cast objects
         if (is_object($cell)) { $cell = (array) $cell; }

         if ($recursive === true && is_array($cell) && !empty($cell)) {
            // Recursive mode
            $table .= "\n" . array2table($cell, true, true) . "\n";
          else {
            $table .= (strlen($cell) > 0) ?
               htmlspecialchars((string) $cell) :
               $null;
         }

         $table .= '</td>';
}

         $table .= "</tr>\n";
   }

   $table .= '</table>';
   return $table;
}

print array2table($a);

}

samedi, 15 décembre 2018 10:20

Récupérer un token de facebook

Écrit par

J'en ai mis du temps pour comprendre. Voila comment j'ai fait. Le token est renoyé par Facebook lorsque l'on "attaque" le serveur (notez bien les guillemets, je ne suis pas un pirate) en se présentant à la porte du serveur, avec ses données d'authentification.

Voici ce que j'ai fait pour que ca marche :

L'url est de la forme :
https://graph.facebook.com/oauth/access_token?client_id=[ID_CLIENT]&client_secret=[SECRET_CLIENT]&grant_type=client_credentials

Bon, je sais vous allez me dire "bof, qu'est ce qu'il raconte"? Dans un premier temps, j'ai dû chercher et me renseigner partout pour comprendre mais je tenais à vous livrer mes "secrets" (et pas mes "secret_client"  :-) )

Déja, il faut bien comprendre que [ID_CLIENT] et [SECRET_CLIENT] sont donnés par facebook via https://developers.facebook.com. Créer votre "application" (c'est comme ca que Facebook l'appelle) et récupérez ces valeurs.

Voila comment récupérer les différents éléments.

  1. ID de l'app :
    Comme son nom de l'indique pas à mon goût, l'ID_CLIENT correspond à  l'ID DE L'APP que l'on retrouve en haut de la page
    ID app
  2. Comme son nom de l'indique pas à mon goût, le SECRET_CLIENT correspond au code "secret" fourni par facebook. Vous le retrouverez ici c'est la clef secrete
    secret

  3.  Enfin l'oubliez pas le niveau d'habilitation qui, dans notre cas pour de la lecture seule, s'appelle : client_credentials

Personnellement, je n'utilise le moins possible les boites à outils fournies par facebook (notamment leurs boite PHP) car acebook fournissant la possibilité de se connecter à leurs serveur avaec un niveau plus bas, je reste sûr que ce niveau ne changera pas. En effet, cURL reste du cURL et tant que Facebook maintient la bibliothèque cURL, même si leus boite à outil s'enrichit, les connection de plus bas niveau ne risquent pas d'étre modifiée, comme cela à été le cas en 2012 !! Il faut être appris pour apprenndre....

TEST DE LA CONFIGURATION

Je suis un peu désolé pour les gens sur Windows, je ne sais pas si Windows intègre désormais la commande cURL. Par contre, les vrais systèmes d'exploitation l'intègre. Lancez votre Terminal (MacOS) ou votre shell (Linux) et lancer la commande suivante :

 

curlcurl -X GET "https://graph.facebook.com/oauth/access_token?client_id=563967863956584&client_secret=[VOTRE_CLEF_SECRETE]&grant_type=client_credentials"

et le résultat (votre token d'accès) apparait :

final

 

CQFD, apres des mois et des mois de compréhension

samedi, 08 décembre 2018 18:58

Extraire du json, du XML en php

Écrit par

Cette fonction convertit un fichier (le contenu d'un fichier) en tableau

function json2array($fichier)
{
   $cnt = file_get_contents($fichier);
   return(json_decode($cnt,true));
}


Cette fonction convertit une URL d'un fichier XML en tableau

function xmlurl2array($fic){
   $x=simplexml_load_file($fic);
   return $x;
}


Cette fonction convertit une chaine XML en tableau associatif :

function xmlToArray($url, $options = array()) {
$xml=file_get_contents($url);
$defaults = array(
'namespaceRecursive' => false, //setting to true will get xml doc namespaces recursively
'removeNamespace' => false, //set to true if you want to remove the namespace from resulting keys (recommend setting namespaceSeparator = '' when this is set to true)
'namespaceSeparator' => ':', //you may want this to be something other than a colon
'attributePrefix' => '@', //to distinguish between attributes and nodes with the same name
'alwaysArray' => array(), //array of xml tag names which should always become arrays
'autoArray' => true, //only create arrays for tags which appear more than once
'textContent' => '$', //key used for the text content of elements
'autoText' => true, //skip textContent key if node has no attributes or child nodes
'keySearch' => false, //optional search and replace on tag and attribute names
'keyReplace' => false //replace values for above search values (as passed to str_replace())
);
$options = array_merge($defaults, $options);
$namespaces = $xml->getDocNamespaces($options['namespaceRecursive']);
$namespaces[''] = null; //add base (empty) namespace

//get attributes from all namespaces
$attributesArray = array();
foreach ($namespaces as $prefix => $namespace) {
if ($options['removeNamespace']) $prefix = "";
foreach ($xml->attributes($namespace) as $attributeName => $attribute) {
//replace characters in attribute name
if ($options['keySearch']) $attributeName =
str_replace($options['keySearch'], $options['keyReplace'], $attributeName);
$attributeKey = $options['attributePrefix']
. ($prefix ? $prefix . $options['namespaceSeparator'] : '')
. $attributeName;
$attributesArray[$attributeKey] = (string)$attribute;
}
}

//get child nodes from all namespaces
$tagsArray = array();
foreach ($namespaces as $prefix => $namespace) {
if ($options['removeNamespace']) $prefix = "";
foreach ($xml->children($namespace) as $childXml) {
//recurse into child nodes
$childArray = xmlToArray($childXml, $options);
list($childTagName, $childProperties) = each($childArray);

//replace characters in tag name
if ($options['keySearch']) $childTagName =
str_replace($options['keySearch'], $options['keyReplace'], $childTagName);
//add namespace prefix, if any
if ($prefix) $childTagName = $prefix . $options['namespaceSeparator'] . $childTagName;

if (!isset($tagsArray[$childTagName])) {
//only entry with this key
//test if tags of this type should always be arrays, no matter the element count
$tagsArray[$childTagName] =
in_array($childTagName, $options['alwaysArray']) || !$options['autoArray']
? array($childProperties) : $childProperties;
} elseif (
is_array($tagsArray[$childTagName]) && array_keys($tagsArray[$childTagName])
=== range(0, count($tagsArray[$childTagName]) - 1)
) {
//key already exists and is integer indexed array
$tagsArray[$childTagName][] = $childProperties;
} else {
//key exists so convert to integer indexed array with previous value in position 0
$tagsArray[$childTagName] = array($tagsArray[$childTagName], $childProperties);
}
}
}

//get text content of node
$textContentArray = array();
$plainText = trim((string)$xml);
if ($plainText !== '') $textContentArray[$options['textContent']] = $plainText;

//stick it all together
$propertiesArray = !$options['autoText'] || $attributesArray || $tagsArray || ($plainText === '')
? array_merge($attributesArray, $tagsArray, $textContentArray) : $plainText;

//return node as array
return array(
$xml->getName() => $propertiesArray
);
}