2011-01-03 16 views
1

Ich habe ein Back-End mit Python-Funktionen eingerichtet. Ich möchte, dass Python eine Menge ortsbasierter Arbeit erledigt, anstatt objective-c die Berechnungen und alles andere zu machen. Dafür gibt es Gründe.iPhone Aufruf von Python-Funktionen von Server

Ich habe jedoch keine Ahnung, wie Sie eine Verbindung zum Server herstellen und die Python-Funktionen von objective-c aufrufen. Weiß jemand davon?

Danke!

+1

Klingt so, als müsste man einen Webservice in Python schreiben und das von objective-c aufrufen –

Antwort

3

Auch ich benutze Python auf einem Server (Google App Engine) für eines meiner Projekte. Ich habe einen Endpunkt, der eine Menge Daten im JSON-Format zurückgibt. (parseJSON ist meine eigene Methode)

@interface GSData : NSObject { 
NSMutableData *responseData; 
} 

///////////////////////// 

// in my .m file 

- (void)getData { 
    responseData = [[NSMutableData data] retain]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:DATA_URL]]; 
    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"Connection failed: %@", [error description]); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    [connection release]; 

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    [responseData release]; 

    [self parseJSON:responseString]; 
    [responseString release]; 
} 

Für JSON, ich bin mit this project.

Hoffe, das hilft!

2

Hier sind ein paar Dinge zu beachten.

Zuerst, nach den Apple HIG-Richtlinien, muss Ihre App mit der Erreichbarkeitsklasse nach Netzwerkkonnektivität suchen.

Um Python auszuführen, möchten Sie wahrscheinlich Endpunkte auf dem Server erstellen (Webseiten, die mit Python und Ihrer App interagieren).

Für die tatsächlichen Anforderungen würde ich empfehlen, die ASIHTTPRequest class zu verwenden. Es macht eine Menge Arbeit für Sie (einschließlich der erforderlichen Konnektivitätsprüfungen).

EDIT

Wie pro Antrag des OP, hier ist ein psuedo Beispiel.

  1. Lassen Sie einen Webservice laufen. Stellen wir uns vor, dass es ein Python-Skript namens "Geo.py" gibt, das basierend auf einem Ort einen Breitengrad zurückgibt. (Auch bekannt als umgekehrte Geocodierung.)

  2. Verwenden Sie ASIHTTPRequest, um eine Anfrage an `http://yourserver.com/Geo.py zu senden. Sie können die Anfragen asynchron oder synchron senden.

Das sollte es sein. ASIHTTPRequest sollte die Fehlerprüfung und Konnektivität für Sie übernehmen.

+0

Also möchte ich eine Python-Funktion aufrufen, die in die Datenbank schreibt. Dies erzeugt eine Abstraktionsebene von der Clientseite und der Serverseite. – nicholjs

+0

Ich frage mich, ob es ein Beispiel gibt, dass Sie mir zur Verfügung stellen können? Die ASIHTTPRequest scheint in der Reihe zu sein ... ich denke. – nicholjs

+0

@JohnJ - Ich habe kein genaues Beispiel, aber ich werde das Konzept genauer beschreiben. – Moshe

Verwandte Themen