SLOONO.de-API MMS: XML

Aus SLOONO.de-API

Wechseln zu: Navigation, Suche

Es ist möglich MMS durch senden einer XML-POST-Anfrage zu senden.

Inhaltsverzeichnis

API

Anfrage

Adresse: http://www.sloono.de/API/xmlmms.php

Der XML-Block sieht dabei möglicherweise so aus:

  1. <?xml version="1.0"?>
  2. <MMS>
  3.    <user>Username</user>
  4.    <password>MD5 des Userpassworts</password>
  5.    <timestamp>0</timestamp>
  6.    <from>1</from>
  7.    <to>+49(160)123456</to>
  8.    <slides>
  9.        <slide wait="0">
  10.            <data typ="txt">BASE64TEXT</data>
  11.            <data typ="img" ext="jpg">BASE64BILD</data>
  12.            <data typ="snd" ext="mid">BASE64TON</data>
  13.        </slide>
  14.    </slides>
  15.    <action>info</action>
  16.    <return>html</return>
  17.    <httphead>1</httphead>
  18. </MMS>

Der XML-Block muss als Variable XMLDATA übertragen werden.

Parameter Typ Beschreibung Standard
user Text Username  
password Text MD5-Hashwert des Passworts  
timestamp Zahl UNIX-Timestamp der genünschten Sendezeit. Bei 0 oder einem vergangenem Zeitpunkt wird sofort gesendet. 0
from Zahl

Absenderkennung:

  1. Handynummer
  2. Absenderkennung 1
  3. Absenderkennung 2
  4. Absenderkennung 3
  5. Absenderkennung 4
1
to Text Zielnummern getrennt durch Komma (,) und im nationalen oder internationalen Format (0123/456789 oder +49(123)456789). Es können auch die Spitznamen aus dem Adressbuch oder Vor- + Nachname aus dem Adressbuch benutzt werden.  
slides Node

Slides enthält als Unterpunkte die Folien. Jede Folie besteht aus einem Rahmen slide, welcher das Attribut wait beinhalten kann, und ein bis drei Datenobjekten <data typ="img" ext="jpg">BASE64BILD</data>. Jedes Datenobjekt muss das Attribut typ mit img, txt oder snd und das Attribut ext mit der Dateiendung bereitstellen. Der Dateiinhalt wird dann BASE64-kodiert als Inhalt eingefügt. Erlaubte Dateiformate:

  • jpg
  • gif
  • mid/midi
 
action Text Es können die Werte info oder send gesetzt werden. Der Wert send überträgt die SMS ins System von MMSCLICK, während info nur Informationen über die SMS wie z. B. Preis zurück gibt. Nach dem senden werden die gleichen Informationen zurück gegeben. send
return Text Mit dieser Variable wird das Antwortformat festgelegt. Mit text wird die Antwort als Mehrzeiliger Text zurückgegeben während xml ein XML-Schema liefert. text
httphead Zahl Wenn httphead auf 1 gesetzt wird, so werden bei Fehlern HTTP-Header ungleich 200 gesendet. Beim Wert 0 muss der Fehler aus der Antwort abgelesen werden. 1

Alle Variablen, die keinen Standartwert haben müssen gesetzt werden!

Antwort

Eine Vorauswahl wird bereits mit dem HTTP-Header der Antwort getroffen. Wenn etwas anderes als HTTP 1/1 200 OK als Antwort empfangen wird ist ein Fehler aufgetreten. Zurückgegeben wird ein Fehlercode, ein Fehlertext und Informationen (falls vorhanden).

Quellcodebeispiele

PHP

Beispiel: Versendet zwei Folien mit Text und gibt den Antwortquellcode aus.

  1. <?php 
  2.  
  3. $Text = array("Text auf Folie 1","Text auf Folie 2"); 
  4. $xml = '<?xml version="1.0"?> 
  5. <MMS> 
  6.     <user>'.$Username.'</user> 
  7.     <password>'.md5($Passwort).'</password> 
  8.     <timestamp>0</timestamp> 
  9.     <from>1</from> 
  10.     <to>'.$Empfaenger.'</to> 
  11.     <slides> 
  12.         <slide wait="0"> 
  13.             <data typ="txt">'.base64_encode($Text[0]).'</data> 
  14.         </slide> 
  15.         <slide wait="0"> 
  16.             <data typ="txt">'.base64_encode($Text[1]).'</data> 
  17.         </slide> 
  18.     </slides> 
  19.     <action>send</action> 
  20.     <return>html</return> 
  21.     <httphead>1</httphead> 
  22. </MMS>'; 
  23.  
  24. $url_parsed = parse_url("http://www.mmsclick.de/API/xmlmms.php"); 
  25. $host = $url_parsed["host"]; 
  26. $port = $url_parsed["port"]; 
  27. if ($port==0) $port = 80; 
  28. $path = $url_parsed["path"]; 
  29. if (empty($path)) $path = "/"; 
  30. if ($url_parsed["query"] != "") $path .= "?".$url_parsed["query"]; 
  31. $fp = fsockopen($host, $port, $errno, $errstr, 60); 
  32. if(!$fp) return false; 
  33. $out = "POST $path HTTP/1.1\r\n"; 
  34. $out .= "Host: $host\r\n"; 
  35. $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
  36. $out .= "Content-length: ".strlen("XMLDATA=".urlencode($xml))."\r\n"; 
  37. $out .= "Connection: close\r\n\r\n"; 
  38. $out .= "XMLDATA=".urlencode($xml); 
  39. fputs($fp,$out); 
  40. $body = ""; 
  41. while(!feof($fp)) $body.= fgets($fp, 256); 
  42. fclose($fp); 
  43.  
  44. echo "<pre>".print_r($body,true)."</pre>"; 
  45.  
  46. ?>

JAVA

Beispiel: Versendet eine Foli mit Text und Bild. Die Antwort wird in die Konsole geschrieben.

  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.UnsupportedEncodingException;
  9. import java.net.URL;
  10. import java.net.URLConnection;
  11. import java.net.URLEncoder;
  12.  
  13. import org.apache.commons.codec.binary.Base64;
  14.  
  15. /**
  16.  *
  17.  * @author Stephan Schweig (schweig@sloono.de)
  18.  * @version 15.03.2010
  19.  */
  20. public class Main {
  21.     /** URL der SLOONO-API */
  22.     private static final String xmlURL = "http://www.sloono.de/API/xmlmms.php";
  23.  
  24.     /** Username */
  25.     private static final String user = "Username";
  26.  
  27.     /** Passwort, noch nicht MD5 gehashed! */
  28.     private static final String password = "Passwort ohne MD5";
  29.  
  30.     /** Zielnummer, bitte + durch 00 ersetzen um Fehler mit unserem aktuellen XML-Parser zu vermeiden. */
  31.     private static final String number = "0049160123456789";
  32.  
  33.     /** Text, der übertragen werden soll. */
  34.     private static final String message = "testtext";
  35.  
  36.     /** Pfad zu einer Bilddatei. */
  37.     private static final String fileLocation = "D:\\test.jpg";
  38.  
  39.     public static void main(String[] args) {
  40.  
  41.         String content = "<?xml version=\"1.0\"?>\r\n"
  42.                         + "<MMS>\r\n"
  43.                         + "<user>"
  44.                         + user
  45.                         + "</user>\r\n"
  46.                         + "<password>"
  47.                         + Md5String(password)
  48.                         + "</password>\r\n"
  49.                         + "<timestamp>0</timestamp>\r\n"
  50.                         + "<from>1</from>\r\n"
  51.                         + "<to>"
  52.                         + number
  53.                         + "</to>\r\n"
  54.                         + "<slides>\r\n"
  55.                         + "<slide wait=\"0\">\r\n"
  56.                         + "<data typ=\"txt\">"
  57.                         + base64_encode(message)
  58.                         + "</data>\r\n"
  59.                         + "<data typ=\"img\" ext=\"jpg\">"
  60.                         + base64_encode(new File(fileLocation))
  61.                         + "</data>\r\n"
  62.                         + "</slide>\r\n"
  63.                         + "</slides>\r\n"
  64.                         + "<httphead>0</httphead>\r\n"
  65.                         + "</MMS>";
  66.  
  67.         String xmlResult = "";
  68.  
  69.         // POST-Daten müssen URL-kodiert werden
  70.         try {
  71.             content = "XMLDATA=" + URLEncoder.encode(content, "ISO-8859-1");
  72.         } catch (UnsupportedEncodingException ex) {
  73.             ex.printStackTrace();
  74.         }
  75.  
  76.         try {
  77.             // Verbinden
  78.             URL aspsmsURL = new URL(xmlURL);
  79.             URLConnection aspsmsCon = aspsmsURL.openConnection();
  80.  
  81.             // POST-Daten senden
  82.             aspsmsCon.setDoOutput(true);
  83.             OutputStreamWriter out = new OutputStreamWriter(aspsmsCon.getOutputStream());
  84.             out.write(content);
  85.             out.flush();
  86.  
  87.             // Antwort abrufen
  88.             BufferedReader in = new BufferedReader(new InputStreamReader(aspsmsCon.getInputStream()));
  89.             String inputLine;
  90.             while ((inputLine = in.readLine()) != null) {
  91.                 xmlResult = xmlResult + inputLine;
  92.                 System.out.println(inputLine);
  93.             }
  94.             out.close();
  95.             in.close();
  96.  
  97.             System.out.println("done");
  98.         } catch (Exception ex) {
  99.             ex.printStackTrace();
  100.         }
  101.     }
  102.  
  103.     public static String getFileContent(String f) {
  104.         File file = new File(f);
  105.         FileInputStream fis = null;
  106.         BufferedReader bis = null;
  107.  
  108.         StringBuffer sb = new StringBuffer();
  109.  
  110.         try {
  111.             fis = new FileInputStream(file);
  112.             bis = new BufferedReader(new InputStreamReader(fis));
  113.  
  114.             String line;
  115.             while ((line = bis.readLine()) != null) {
  116.                 sb.append(line + "\n");
  117.             }
  118.             bis.close();
  119.             fis.close();
  120.         } catch (FileNotFoundException e) {
  121.             e.printStackTrace();
  122.         } catch (IOException e) {
  123.             e.printStackTrace();
  124.         }
  125.  
  126.         return sb.toString();
  127.     }
  128.  
  129.     /**
  130.      * Calculates the MD5 checksum of a string.
  131.      * @param text Input text.
  132.      * @return MD5 hash of the input text as a string
  133.      */
  134.     static public String Md5String(String text) {
  135.         byte[] input = text.getBytes();
  136.         java.security.MessageDigest md5;
  137.         try
  138. 	{
  139. 	    md5 = java.security.MessageDigest.getInstance("MD5");
  140.         }
  141. 	catch (Exception e)
  142. 	{
  143. 	    System.out.println(e.toString());
  144. 	    e.printStackTrace();
  145.             return "";
  146.         }
  147. 	byte[] md5Bytes = md5.digest(input);
  148.         StringBuffer hexValue = new StringBuffer();
  149. 	for (int i=0; i<md5Bytes.length; i++) {
  150. 	    int val = ((int) md5Bytes[i] ) & 0xff;
  151. 	    if (val < 16) hexValue.append("0");
  152. 	    hexValue.append(Integer.toHexString(val));
  153. 	}
  154. 	return hexValue.toString();
  155.     }
  156.  
  157.     /**
  158.      * Encodes the given string with base64 codec.
  159.      * @param text Given text to encode.
  160.      * @return Result of the base64 encoding.
  161.      */
  162.     public static String base64_encode(String text) {
  163.         byte[] encoded = Base64.decodeBase64(text.getBytes());
  164.         return new String(encoded);
  165.     }
  166.  
  167.     /**
  168.      * Encodes the content of the given file with base64 codec.
  169.      * @param file Given file to encode.
  170.      * @return Result of the base64 encoding.
  171.      */
  172.     public static String base64_encode(File file) {
  173.         try {
  174.             FileInputStream fis = new FileInputStream(file);
  175.             int numberBytes = fis.available();
  176.             byte bytearray[] = new byte[numberBytes];
  177.             fis.read(bytearray);
  178.             fis.close();
  179.             byte[] encoded = Base64.encodeBase64(bytearray);
  180.             return new String(encoded);
  181.         } catch (IOException ex) {
  182.             return null;
  183.         }
  184.     }
  185. }
Meine Werkzeuge