Image upload auf ImageShack,TinyPic usw.

Jigga

Bekanntes Mitglied
Guten Abend alle zusammen,

ich hab mir letztes Gedanken über ein kleines Programm gemacht,das folgendes können sollte:
Upload eines bildes auf einem beliebigen(vorher definierten) ImageHoster(vorzugsweise ImageShack und TinyPic)
Ausserdem will ich mich in einem Forum anmelden können und mit dem Programm einen Post erstellen in dem unteranderem der link zum vorher hochgeladenem bild enthalten ist.

Soweit so gut,erste Frage wäre vorerst: Ist mein vorhaben überhaupt möglich?
Ich habe eine ganze weile nach "datei upload mit java" gegooglet und wurde leider nur bedingt fündig.
Mir ist mitlerweile bewusst,dass "httpclient" für dieses vorhaben wohl eine grundlage sein wird und da komme ich auch schon zur zweiten Frage.
Ich habe den Httpclient runtergeladen und über "properties => java build paath => libraries => add library" die mitgelieferten JARs in mein projekt eingebunden.Jedoch kriege ich schon beim erstellen eines Clients: [Java]HttpClient client = new HttpClient();[/code]
einen Fehler beim "HttpClient()" der wie folgt lautet: "Cannot instantiate the type HttpClient"

Habe ich beim einbinden etwas falsch gemacht oder woran könnte das liegen.Achja an dieser stelle sollte ich wohl noch erwähnen,dass ich mit Eclipse 3.5.2 arbeite.

Ich wäre für hilfe und vielleicht sogar über kleine code schnipsel an denen man sich ungefähr orientieren könnte sehr dankbar.

mfg Jigga
 
Probiere mal [c]new DefaultHttpClient()[/c] glaube da hat sich was in der 4er Version verändert (ich finde leider nur die alte API Doc so spontan ;( )
 
Probiere mal [c]new DefaultHttpClient()[/c] glaube da hat sich was in der 4er Version verändert (ich finde leider nur die alte API Doc so spontan ;( )


ein problem weniger.das hat schon mal funktioniert,danke.ich dachte schon ich hätte etwas beim einbinden falsch gemacht...
und ja da hat sich wohl einiges geändert,weil ich zB die "PostMethode" auch als falsch angestrichen bekomme ???:L
 
hat jemand noch eine idee bezüglich des image upload?

Hier ist ein Prototyp für imageshack.us:

Du brauchst den Apache Commons HTTP Client/Core
http://apache.mirror.iphh.net//http...nts-client-4.0.3-bin-with-dependencies.tar.gz

und für den HTML Code die Apache Commons Lang; alternativ kommentiere Zeile 85 aus und fixe die Imports.
http://apache.mirror.clusters.cc//commons/lang/binaries/commons-lang-2.5-bin.tar.gz

Beachte:
  • Für Bilder kleiner ca. 165x165 generiert imageshack nicht notwendigerweise Thumbnails, daher sind die zurückgegebenen Properties für "*-Miniatur" nicht notwendigerweise gefüllt.
  • Ich habe nur
    Code:
    Pattern
    -s für einen Forencode und einen HTML-Code geschrieben. Für die übrigen Codes kannst Du in
    Code:
    "onClick=\"pageTracker\\._trackEvent\\('new-done-click','thumb-forum-click'\\);\".+(\\[URL=\\S+\\[/URL\\])"
    das
    Code:
    thumb-forum-click
    z. B. gegen
    Code:
    alt-forum-click
    ersetzen. Schau Dir den Quelltext der Imageshack-Hochladenfertig-Seite an.
  • Ich kenne mich nicht so toll mit dem Apache HttpClient aus und erzeuge insgesamt zwei Instanzen. Das kann mit dem ConnectionManager des Client bestimmt eleganter machen.
  • Ich weiss nicht, ob die MultiPartEntity-Klasse so schlau ist, die Content-Length für den POST aus der Länge der Datei zu berechnen. Schlimmstenfalls landet die Bilddatei im Speicher, was bei vielen großen Bildern vielleicht Probleme gibt.
  • Sobald imageshack seine Webseite ändert, klappt das alles nicht mehr.
  • Vielleicht macht es Sinn, einen gefaketen User-Agent anzugeben und den Upload als einen von Firefox zu tarnen.
Java:
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class ImageShackUploadDemo {
	
	private static final Pattern fullPic 
		= Pattern.compile("<label><a href=\"(\\S+)\"\\s+onClick=\"pageTracker\\._trackEvent\\('new-done-click','link-directlink-click'\\);\">",
			Pattern.MULTILINE );
	
	private static final Pattern forumThumbPattern 
		= Pattern.compile("onClick=\"pageTracker\\._trackEvent\\('new-done-click','thumb-forum-click'\\);\".+(\\[URL=\\S+\\[/URL\\])", 
			Pattern.MULTILINE );

	private static final Pattern htmlThumbPattern 
		= Pattern.compile("onClick=\"pageTracker\\._trackEvent\\('new-done-click','thumb-html-click'\\);\".+(&lt;a.+/a&gt;)", 
			Pattern.MULTILINE );

	public Properties uploadToImageShack(final File file, final String mimeType) {

		try {
			int statusCode;
			HttpResponse response;
			Matcher matcher;
			final Properties result = new Properties();
			
			final MultipartEntity mpe = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
			mpe.addPart("uploadtype", new StringBody("on"));
			mpe.addPart("fileupload", new FileBody(file, mimeType));
			mpe.addPart("url", new StringBody("paste url here"));
			mpe.addPart("email", new StringBody(""));
			mpe.addPart("MAX_FILE_SIZE", new StringBody(""+5000000));
			mpe.addPart("refer", new StringBody(""));
			mpe.addPart("brand", new StringBody(""));
			mpe.addPart("optsize", new StringBody("320x320"));
			
			final HttpPost httpPost = new HttpPost("http://imageshack.us/");
			httpPost.setEntity(mpe);
	
			response = new DefaultHttpClient().execute(httpPost);
			
			statusCode = response.getStatusLine().getStatusCode();
			if(statusCode != HttpStatus.SC_MOVED_TEMPORARILY || statusCode == HttpStatus.SC_MOVED_PERMANENTLY) {
				throw new IllegalStateException("Expected 302, got "+statusCode);
			}

			final String landingPage = response.getLastHeader("location").getValue(); 
			result.setProperty("landing_page", landingPage);
			
			final HttpGet getRequest = new HttpGet(landingPage);
			response = new DefaultHttpClient().execute(getRequest);
				
			statusCode = response.getStatusLine().getStatusCode();
			if(statusCode != HttpStatus.SC_OK) {
				throw new IllegalStateException("Expected 200, got "+statusCode);
			}

			final String content = EntityUtils.toString(response.getEntity());

			matcher = fullPic.matcher(content);
			if(matcher.find()) {
				result.put("direct", matcher.group(1));
			}
			
			matcher = forumThumbPattern.matcher(content);
			if(matcher.find()) {
				result.put("forum_thumb", matcher.group(1));
			}
						
			matcher = htmlThumbPattern.matcher(content);
			if(matcher.find()) {
				// http://apache.mirror.clusters.cc//commons/lang/binaries/commons-lang-2.5-bin.tar.gz
				result.put("html_thumb", StringEscapeUtils.unescapeHtml(matcher.group(1)));
			}
			
			return result;
		} catch(final Throwable t) {			
			throw new RuntimeException("Error uploading "+file+"!", t);
		}
	}

	public static void main(String[] args) throws IOException {	
		final File file = new File("irgendeinbild.jpg");
		System.out.println(new ImageShackUploadDemo().uploadToImageShack(file, "image/jpeg"));
	}
}
 
Zuletzt bearbeitet:
Hier ist ein Prototyp imageshack.us:

ich danke dir vielmals,werde es gleich mal ausprobieren und dann rückmeldung geben 🙂





EDIT:
ok es funktioniert echt super,habs jetzt auch so weit abgeändert,dass mir nur der direkte link zum bild ausgegeben wird.
eine weitere frage hätte ich noch: Wie gehe ich ans erstellen von forum themen am besten ran?
habe es jetzt eine weile auf der basis meiner forum login class probiert (die soweit ich beurteilen kann gut funktioniert) .Das klappte leider nicht,wahrscheinlich,weill ein forum post anders aufgebaut ist als eine simpler login post?
Habt ihr da vielleicht ideen?Das ganze soll recht schlicht sein,sprich ein kurzes thema erstellen mit einem relativ kurzen text
 
Zuletzt bearbeitet:
Ich weiß ja nicht, was Du alles an Vorarbeit geleistet hast, aber da es Forensoftware wie Sand am Meer gibt, bleibt nichts anderes als den Netztraffic und den Quelltext zu analysieren, falls es OpenSource ist. Und dass selbstverständlich für alle Arten von Posts und es ist klar, daß ein login und ein wie auch immer gearteter Beitrags oder Threadpost nichts miteinander zu tun haben. Vor allem sind die Macher und Betreiber von Foren i. a. nicht daran interessiert, das jemand automatisch Content hineinpumpt. :noe:

Welche Forensoftware ist es denn? Wenn es sich um ein phpbb- bzw. Bbcode kompatibles Forum handelt, kannst Du doch das IMG Markup vin imageshack gleich verwenden.
 
Zuletzt bearbeitet:
Ich weiß ja nicht, was Du alles an Vorarbeit geleistet hast, aber da es Forensoftware wie Sand am Meer gibt, bleibt nichts anderes als den Netztraffic und den Quelltext zu analysieren, falls es OpenSource ist. Und dass selbstverständlich für alle Arten von Posts und es ist klar, daß ein login und ein wie auch immer gearteter Beitrags oder Threadpost nichts miteinander zu tun haben. Vor allem sind die Macher und Betreiber von Foren i. a. nicht daran interessiert, das jemand automatisch Content hineinpumpt. :noe:

Welche Forensoftware ist es denn? Wenn es sich um ein phpbb- bzw. Bbcode kompatibles Forum handelt, kannst Du doch das IMG Markup vin imageshack gleich verwenden.

Ich hab mir schon gedacht,dass man sich sorgen machen wird. Aber ich kann dich beruhigen. Das zukünftige Programm ist von den Betreibern sogar erwünscht,weil es einen gewissen Vorgang erleichtert.
Beim Forum handelt sich um das free Forum von phpBB.
Ich hab bereits versucht mir mit den live httpheaders addon weiterzuhelfen,aber gut werde mal in den quelltest reinschauen. Dabei wäre der quelltext der Seite "New topic" das richtige für mich,oder bräuchte ich noch was?
 
mir ist gerade eingefallen,dass ich den forum post ja eigentlich auch mit hilfe eines anderen tools und per batch file erstellen könnte, die ich dann per java statement aufrufe.
wäre das nicht irgendwo einfacher?
 
Grundsätzlich gilt, daß das eigentlich kein Java-Problem ist. Ich habe mich vor'm Schlafengehen jetzt zwei Tage mit phpBB3.0.7-PL1 herumgeschlagen und konnte das Einloggen recht problemlos realisieren. Aber es ist mir nicht gelungen, einen Thread zu erstellen. Ich habe:
  • die POST-Url mit SID richtig ausgelesen
  • alle Cookies mitgeschickt
  • den Multipart nachgebaut (...aber ohne den Fileupload-Part, vielleicht liegt es daran. Es ändert sich aber das HTML-Form Element, wenn man Attachments disabled. Das nervt.)
  • die Referer richtig gesetzt
  • den User-Client richtig gesetzt
Ich habe keine Ahnung, was da schiefläuft; vielleicht ist es nur ein Mini-Detail aber ich müsste die Ursache mit einem PHP-Debugger suchen und dazu fehlt mir einfach die Zeit. Sorry.
 
Zuletzt bearbeitet:
Grundsätzlich gilt, daß das eigentlich kein Java-Problem ist. Ich habe mich vor'm Schlafengehen jetzt zwei Tage mit phpBB3.0.7-PL1 herumgeschlagen und konnte das Einloggen recht problemlos realisieren. Aber es ist mir nicht gelungen, einen Thread zu erstellen. Ich habe:
  • die POST-Url mit SID richtig ausgelesen
  • alle Cookies mitgeschickt
  • den Multipart nachgebaut (...aber ohne den Fileupload-Part, vielleicht liegt es daran. Es ändert sich aber das HTML-Form Element, wenn man Attachments disabled. Das nervt.)
  • die Referer richtig gesetzt
  • den User-Client richtig gesetzt
Ich habe keine Ahnung, was da schiefläuft; vielleicht ist es nur ein Mini-Detail aber ich müsste die Ursache mit einem PHP-Debugger suchen und dazu fehlt mir einfach die Zeit. Sorry.


Hmm das hört sich ja nicht sehr dolle an.ich dachte echt,dass es etwas leichter gehen würde.
Ich hab den login zwar bereits,aber könntest du mir vll dennoch das zukommen lassen was du zusammengestellt hast?vielleicht kann ich da beim forum post ansetzen und weiter "rumprobieren"
wäre sehr nett von dir 🙂

EDIT:
Probiere das ganze jetzt auch schon die ganze zeit.Habs mir mit http live headers anegschaut und am ende 2 "auth[]" felder gefunden mit jeweils einer verschiedenen zahlen + buchstaben folge.diese scheinen bei jedem user immer gleich zu bleiben wenn ich mich nicht irre.die müsste ich dann ja auch in den multipart einbauen,jedoch weiß ich noch nicht so recht,wo ich die herbekommen soll
 
Zuletzt bearbeitet:

Zurück
Oben