Hauptmenü

Werkzeuge

Kategorien

Archiv

HTTP Requests mit Apple Swift abschicken und verarbeiten

Erstellt in Allgemein am 24. Dezember 2014 vom Daschmi

Um mittels Swift eine Anfrage an eine URL zu stellen kann wie folgt vorgegangen werden:

Zuerst die URL mit den GET Parametern definieren:

let strURL : NSString = "http://daschmi.de/api/?variable1=value1"

Dann muss der Request erstellt und die Connection aufgebaut werden:

let request : NSURLRequest = NSURLRequest(URL: strUrl)
let MyRequestDelegate : RequestDelegate()
var connection : NSURLConnection!  = NSURLConnection(request: request, delegate: MyRequestDelegate, startImmediately: true);
connection.start();

Im Delegate können dann folgende Interface Methode verwendet werden um die Rückgabe zu verarbeiten:

class RequestDelegate: NSURLConnectionDelegate {

  var data : NSMutableData = NSMutableData();

  func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {

    // Empfangene Daten anhängen
    self.data.appendData(data)

  }

  func connectionDidFinishLoading(connection: NSURLConnection!) {

    // Verbindung beendet

  }

}

MD5 Checksumme mit Apple Swift berechnen

Erstellt in Apple Swift am 24. November 2014 vom Daschmi

Leider fehlt der Programmiersprache Swift von Apple eine implementation des MD5 Hash Algorithmuses. Dieser kann aber leicht durch eine Erweiterung des String Datentypes nachgerüstet werden:

extension String  {
    var md5: String! {
        let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
        let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)

        CC_MD5(str!, strLen, result)

        var hash = NSMutableString()
        for i in 0..<digestLen {
            hash.appendFormat("%02x", result[i])
        }

        result.destroy()

        return String(format: hash)
    }
}

Angewendet wird das ganze dann einfach wie folgt:

var strHASH : NSString = strToHash.md5

MySQL Tabellenname als Prefix für Alias

Erstellt in Allgemein am 21. Oktober 2014 vom Daschmi

Wenn man zum Beispiel bei einem komplexen Join automatisch alle Spalten mit Prefixen für eine Tabelle versehen will kann man folgenden Code verwenden:

function fetchAssoc(&$db, $strQuery)
{

  $result = $db->query($strQuery);

  $arReturn = array();

  while ($row = $result->fetch_assoc())
  {

    $arReturn[] = $row;

  }

  return $arReturn;

} 

function prefixed_table(&$db, $table_alias, $table)
{

  $columns = fetchAssoc($db, "SHOW COLUMNS FROM `".$table."`");

  $field_names = array();

  foreach ($columns as $column)
  {

    $field_names[] = $column["Field"];

  }

  $prefixed = array();

  foreach ($field_names as $field_name)
  {

  	$prefixed[] = "`".$table_alias."`.`".$field_name."` AS `".$table.".".$field_name."`";

  }

	return implode(", ", $prefixed);

}

Beispielhafte Anwendung für einen xtCommerce Export:

define(TBL_PRODUCTS, ‚xt_products‘);
define(TBL_PRODUCTS_DESCRIPTION, ‚xt_products_description‘);
define(TBL_PRODUCTS_CATEGORIE, ‚xt_products_to_categories‘); 

$db = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

$strQuery = "
  SELECT
    ".prefixed_table($db, ‚P‘, TBL_PRODUCTS).",
    ".prefixed_table($db, ‚PD‘, TBL_PRODUCTS_DESCRIPTION).",
    GROUP_CONCAT(PC.`categories_id`) AS `".TBL_PRODUCTS_CATEGORIE.".categories_id`,
    GROUP_CONCAT(PC.`master_link`) AS `".TBL_PRODUCTS_CATEGORIE.".master_link`
  FROM
    `".TBL_PRODUCTS."` AS P
      LEFT JOIN `".TBL_PRODUCTS_DESCRIPTION."` AS PD ON (P.`products_id` = PD.`products_id`)
      LEFT JOIN `".TBL_PRODUCTS_CATEGORIE."` AS PC ON (P.`products_id` = PC.`products_id`)
  GROUP BY
    P.`products_id`
";

$product_data = fetchAssoc($db, $strQuery);

Templavoilá Template Domainbezogen umschalten / gleicher Seitenbaum

Erstellt in Allgemein am 14. Oktober 2014 vom Daschmi

Möchte man im TYPO3 für einen Seitenbaum mehrere Templavoilá Templates verwenden, so ist dies bisher nicht möglich. Das Seitentemplate ist direkt in dem Datensatz der Seite zugeordnet. Über eine kleine Userfunktion und etwas Typoscript kann dies aber umgangen werden.

Hier die Userfunktion:

class user_tv
{

  function main($content, $conf)
  {

    $GLOBALS[‚TSFE‘]->page[‚tx_templavoila_to‘] = 5;

  }

}

Die 5 muss durch die ID des Templavoila Templateobjects ersetzt werden. Das Umschalten des Templats erfolgt dann mittels folgendem Typoscript Schnipsel:

...
page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page

[hostname = m.add-solution.de] || [globalString = IENV:HTTP_HOST = m.add-solution.de]
includeLibs.lang = fileadmin/user_tv.php
page.1 = USER
page.1.userFunc = user_tv->main

page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page
[global]
...

Push Mitteilungen an Android Smartphones mit PHP versenden

Erstellt in Allgemein am 6. Oktober 2014 vom Daschmi

Kleine Funktion, mit der es möglich ist Push Mitteilungen über den GoogleCloud Message Dienst an registrierte Android Geräte zu versenden.

function android_sendPush($arDeviceIDs, $data)
{

  $apiKey = “; // API Schlüssel eintragen
  $url = ‚https://android.googleapis.com/gcm/send‘;

  $post = array(
	‚registration_ids‘ =>$arDeviceIDs,
 	‚data‘ => $data
  );

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    ‚Authorization: key=‘.$apiKey,
    ‚Content-Type: application/json‘
  ));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));

  $result = curl_exec($ch);

  if (curl_errno($ch))
  {

    die(‚CURL Fehler: ‚.curl_error($ch));
    curl_close($ch);
    return 0;

  }

  return sizeof($arDeviceIDs);

}