SLOONO.de-API MMS: XML
Aus SLOONO.de-API
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:
<?xml version="1.0"?><MMS><user>Username</user>
<password>MD5 des Userpassworts</password>
<timestamp>0</timestamp>
<from>1</from>
<to>+49(160)123456</to>
<slides><slide wait="0"><data typ="txt">BASE64TEXT</data>
<data typ="img" ext="jpg">BASE64BILD</data>
<data typ="snd" ext="mid">BASE64TON</data>
</slide></slides><action>info</action>
<return>html</return>
<httphead>1</httphead>
</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 |
| 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:
|
|
| 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.
<?php$Text = array("Text auf Folie 1","Text auf Folie 2");
$xml = '<?xml version="1.0"?>
<MMS><user>'.$Username.'</user>
<password>'.md5($Passwort).'</password>
<timestamp>0</timestamp><from>1</from><to>'.$Empfaenger.'</to>
<slides><slide wait="0"><data typ="txt">'.base64_encode($Text[0]).'</data>
</slide><slide wait="0"><data typ="txt">'.base64_encode($Text[1]).'</data>
</slide></slides><action>send</action><return>html</return><httphead>1</httphead></MMS>';
$url_parsed = parse_url("http://www.mmsclick.de/API/xmlmms.php");
$host = $url_parsed["host"];
$port = $url_parsed["port"];
if ($port==0) $port = 80;
$path = $url_parsed["path"];
if (empty($path)) $path = "/";
if ($url_parsed["query"] != "") $path .= "?".$url_parsed["query"];
$fp = fsockopen($host, $port, $errno, $errstr, 60);
if(!$fp) return false;
$out = "POST $path HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-length: ".strlen("XMLDATA=".urlencode($xml))."\r\n";
$out .= "Connection: close\r\n\r\n";
$out .= "XMLDATA=".urlencode($xml);
fputs($fp,$out);
$body = "";
while(!feof($fp)) $body.= fgets($fp, 256);
fclose($fp);
echo "<pre>".print_r($body,true)."</pre>";
?>
JAVA
Beispiel: Versendet eine Foli mit Text und Bild. Die Antwort wird in die Konsole geschrieben.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import org.apache.commons.codec.binary.Base64;
/**** @author Stephan Schweig (schweig@sloono.de)* @version 15.03.2010*/public class Main {
/** URL der SLOONO-API */private static final String xmlURL = "http://www.sloono.de/API/xmlmms.php";
/** Username */private static final String user = "Username";
/** Passwort, noch nicht MD5 gehashed! */private static final String password = "Passwort ohne MD5";
/** Zielnummer, bitte + durch 00 ersetzen um Fehler mit unserem aktuellen XML-Parser zu vermeiden. */private static final String number = "0049160123456789";
/** Text, der übertragen werden soll. */private static final String message = "testtext";
/** Pfad zu einer Bilddatei. */private static final String fileLocation = "D:\\test.jpg";
public static void main(String[] args) {
String content = "<?xml version=\"1.0\"?>\r\n"
+ "<MMS>\r\n"+ "<user>"+ user
+ "</user>\r\n"+ "<password>"+ Md5String(password)
+ "</password>\r\n"+ "<timestamp>0</timestamp>\r\n"+ "<from>1</from>\r\n"+ "<to>"+ number
+ "</to>\r\n"+ "<slides>\r\n"+ "<slide wait=\"0\">\r\n"+ "<data typ=\"txt\">"+ base64_encode(message)
+ "</data>\r\n"+ "<data typ=\"img\" ext=\"jpg\">"+ base64_encode(new File(fileLocation))
+ "</data>\r\n"+ "</slide>\r\n"+ "</slides>\r\n"+ "<httphead>0</httphead>\r\n"+ "</MMS>";
String xmlResult = "";
// POST-Daten müssen URL-kodiert werdentry {
content = "XMLDATA=" + URLEncoder.encode(content, "ISO-8859-1");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}try {
// VerbindenURL aspsmsURL = new URL(xmlURL);
URLConnection aspsmsCon = aspsmsURL.openConnection();
// POST-Daten sendenaspsmsCon.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(aspsmsCon.getOutputStream());
out.write(content);
out.flush();
// Antwort abrufenBufferedReader in = new BufferedReader(new InputStreamReader(aspsmsCon.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
xmlResult = xmlResult + inputLine;System.out.println(inputLine);
}out.close();
in.close();
System.out.println("done");
} catch (Exception ex) {
ex.printStackTrace();
}}public static String getFileContent(String f) {
File file = new File(f);
FileInputStream fis = null;
BufferedReader bis = null;
StringBuffer sb = new StringBuffer();
try {
fis = new FileInputStream(file);
bis = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = bis.readLine()) != null) {
sb.append(line + "\n");
}bis.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}return sb.toString();
}/*** Calculates the MD5 checksum of a string.* @param text Input text.* @return MD5 hash of the input text as a string*/static public String Md5String(String text) {
byte[] input = text.getBytes();
java.security.MessageDigest md5;
try{md5 = java.security.MessageDigest.getInstance("MD5");
}catch (Exception e)
{System.out.println(e.toString());
e.printStackTrace();
return "";
}byte[] md5Bytes = md5.digest(input);
StringBuffer hexValue = new StringBuffer();
for (int i=0; i<md5Bytes.length; i++) {
int val = ((int) md5Bytes[i] ) & 0xff;
if (val < 16) hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}return hexValue.toString();
}/*** Encodes the given string with base64 codec.* @param text Given text to encode.* @return Result of the base64 encoding.*/public static String base64_encode(String text) {
byte[] encoded = Base64.decodeBase64(text.getBytes());
return new String(encoded);
}/*** Encodes the content of the given file with base64 codec.* @param file Given file to encode.* @return Result of the base64 encoding.*/public static String base64_encode(File file) {
try {
FileInputStream fis = new FileInputStream(file);
int numberBytes = fis.available();
byte bytearray[] = new byte[numberBytes];
fis.read(bytearray);
fis.close();
byte[] encoded = Base64.encodeBase64(bytearray);
return new String(encoded);
} catch (IOException ex) {
return null;
}}}