/* * Mobypicture.java * * Copyright (C) 2005-2010 Tommi Laukkanen * http://www.substanceofcode.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.substanceofcode.twitter.services; import com.substanceofcode.twitter.PhotoService; import com.substanceofcode.twitter.VideoService; import com.substanceofcode.twitter.model.Status; import com.substanceofcode.utils.CustomInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Calendar; import java.util.Date; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; /** * * @author Tommi Laukkanen */ public class Mobypicture implements PhotoService, VideoService { private final static String MOBYPICTURE_URL = "http://api.mobypicture.com/"; private final static String MOBYPICTURE_DEV_KEY = "cOWRTeoxvFKJipTY"; private static String response = ""; private static Mobypicture instance; private Mobypicture() { } public static Mobypicture getInstance() { if(instance==null) { instance = new Mobypicture(); } return instance; } public String getResponse() { return response; } public Status sendPhoto( byte[] photo, String comment, String username, String password, String filename) throws IOException, Exception { HttpConnection connection = null; try { connection = (HttpConnection) Connector.open(MOBYPICTURE_URL); connection.setRequestMethod( HttpConnection.POST ); String boundary = "BoUnDaRy888"; connection.setRequestProperty("Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary); DataOutputStream dos = connection.openDataOutputStream(); // Action writeString(dos, "--" + boundary + "\r\n"); writeString(dos, "Content-Disposition: form-data; name=\"action\"\r\n"); writeString(dos, "\r\n"); writeString(dos, "postMediaUrl\r\n"); // Media writeString(dos, "--" + boundary + "\r\n"); writeString(dos, "Content-Disposition: form-data; name=\"i\"; filename=\"" + filename + "\"\r\n"); writeString(dos, "Content-Transfer-Encoding: binary\r\n"); writeString(dos, "\r\n"); dos.write(photo,0,photo.length); writeString(dos, "\r\n"); // Username writeString(dos, "--" + boundary + "\r\n"); writeString(dos, "Content-Disposition: form-data; name=\"u\"\r\n"); writeString(dos, "\r\n"); writeString(dos, username + "\r\n"); // Password writeString(dos, "--" + boundary + "\r\n"); writeString(dos, "Content-Disposition: form-data; name=\"p\"\r\n"); writeString(dos, "\r\n"); writeString(dos, password + "\r\n"); // Developer key writeString(dos, "--" + boundary + "\r\n"); writeString(dos, "Content-Disposition: form-data; name=\"k\"\r\n"); writeString(dos, "\r\n"); writeString(dos, MOBYPICTURE_DEV_KEY + "\r\n"); // Message writeString(dos, "--" + boundary + "\r\n"); writeString(dos, "Content-Disposition: form-data; name=\"t\"\r\n"); writeString(dos, "\r\n"); dos.write(comment.getBytes("UTF-8")); writeString(dos, "\r\n"); writeString(dos, "--" + boundary + "--\r\n"); dos.flush(); dos.close(); InputStream his = connection.openInputStream(); CustomInputStream is = new CustomInputStream(his); // Prepare buffer for input data StringBuffer inputBuffer = new StringBuffer(); // Read all data to buffer int inputCharacter; try { while ((inputCharacter = is.read()) != -1) { inputBuffer.append((char) inputCharacter); } } catch (IOException ex) { return null; } //totalBytes += response.length(); if(his!=null) { his.close(); } if(is!=null) { is.close(); } // Split buffer string by each new line response = inputBuffer.toString(); // Parse response boolean status = false; String err = ""; if(response.startsWith("0") || response.startsWith("http://moby")) { // OK status = true; } else { // Error status = false; err = response; } // Create status based on response Status stat = null; Date now = Calendar.getInstance().getTime(); if(status) { stat = new Status(username, comment + " - " + response, now, ""); } else { stat = new Status("Mobypicture", "Error: " + err, now, ""); } return stat; } catch (IOException e) { throw new IOException("IOException: " + e.toString()); } catch (Exception e) { throw new Exception("Error while posting: " + e.toString()); } finally { if (connection != null) { connection.close(); } } } public Status sendVideo( byte[] video, String comment, String username, String password, String filename) throws IOException, Exception { return sendPhoto(video, comment, username, password, filename); } private static void writeString(DataOutputStream dos, String string) throws IOException { byte[] b = string.getBytes(); dos.write(b, 0, b.length); } }