Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> api w python dla php
Adagio
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.01.2007

Ostrzeżenie: (0%)
-----


Witam,
Dostałem zadanie na zajęciach, mianowicie napisać w pythonie interfejs dla php.
Dokładnie chodzi o to aby przekazywać z php parametry do pythona, który będzie coś z nimi robił i zwracał wyniki.

Czy ktoś mógłby mi wyjaśnić w ogóle jak pisać api i rozwiązać komunikację między różnymi językami?
Nigdy podobnego tematu nie ruszałem stąd te braki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Z góry thx za wszelkie wskazówki!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy ktoś mógłby mi wyjaśnić w ogóle jak pisać api i rozwiązać komunikację między różnymi językami?

Robisz skrypt wPHP dostosowany pod php-cli, czyli nie masz np. GET/POST, tylko argc/argv i w Pythonie po prostu przechwytujesz wyjście z polecenia. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Możesz równie dobrze z innego języka korzystać w ten sposób, żaden problem. ;]
Go to the top of the page
+Quote Post
Adagio
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.01.2007

Ostrzeżenie: (0%)
-----


ech jakoś to do mnie nie przemawia (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)
może jeszcze raz...

Mam stronę www z formularzem, na przykład: input, w którym podaję liczbę oraz przycisk submit.
Z tego co napisałeś rozumiem, że podaną na stronie www liczbę muszę przekazać do pośredniczącego skryptu w php.
Następnie ta zmienna powinna zostać przesłana do skryptu w pythonie. I tu jest problem bo tego właśnie nie wiem. Jak wywołać za pomocą języka php skrypt w pythonie i podać na jego wejście zmienną?
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Aha, czyli na odwrót. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Cytat
języka php skrypt w pythonie i podać na jego wejście zmienną?

Przyznam, że nie znam (jeszcze) Pythona, więc pozostaje mi na razie spekulować, że mógłbyś np. wyeksportować te zmienne do jakiegoś pliku (np. XML/WSDL) i w skrypcie Pythona go parsować. A odpalasz go przez zwykły exec" title="Zobacz w manualu PHP" target="_manual.
Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


http://www.csh.rit.edu/~jon/projects/pip/
http://code.google.com/p/friendfeed-api/

Moze ci to pomoze.
Go to the top of the page
+Quote Post
impimp94
post
Post #6





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 6.04.2009
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Możesz wyeksportować zmienne z php do pliku *.txt lub do bazy mysql.
A potem w pythonie pobrać te zmienne
Go to the top of the page
+Quote Post
Adagio
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.01.2007

Ostrzeżenie: (0%)
-----


Cytat(impimp94 @ 23.05.2009, 07:49:20 ) *
Możesz wyeksportować zmienne z php do pliku *.txt lub do bazy mysql.
A potem w pythonie pobrać te zmienne

Można, tylko pozostaje kwestia powiadomienia skryptu w pythonie, że takie dane tam umieściłem. Całkowicie odpada tu cron, gdyż skrypt musi zostać zainicjowany z php.

@erix zaproponował użycie exec" title="Zobacz w manualu PHP" target="_manual do odpalenia skryptu python. Podałem na wejście parametry z jakimi ma program wystartować i działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , także odpadły tutaj sprawy z przekazywaniem danych przez db, pliki itp.

Jednak zastanawia mnie czy można to zrobić jeszcze inaczej? Mimo wszystko używanie polecenia exec chyba nie jest bezpieczne...
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
że takie dane tam umieściłem

A nie możesz po prostu sprawdzić, czy plik istnieje? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat
Jednak zastanawia mnie czy można to zrobić jeszcze inaczej?

No, na plikach/cronem/etc.

Cytat
Mimo wszystko używanie polecenia exec chyba nie jest bezpieczne...

Jeśli nie ubezpieczasz zmiennych przez escapeshellarg" title="Zobacz w manualu PHP" target="_manual, to nie jest. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
ska
post
Post #9





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.03.2007

Ostrzeżenie: (0%)
-----


Cytat(Adagio @ 22.05.2009, 15:53:57 ) *
Witam,
Dostałem zadanie na zajęciach, mianowicie napisać w pythonie interfejs dla php.
Dokładnie chodzi o to aby przekazywać z php parametry do pythona, który będzie coś z nimi robił i zwracał wyniki.

Czy ktoś mógłby mi wyjaśnić w ogóle jak pisać api i rozwiązać komunikację między różnymi językami?
Nigdy podobnego tematu nie ruszałem stąd te braki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Z góry thx za wszelkie wskazówki!

Opakuj sobie po stronie PHP w jakąś klasę kilka wywołań xmlrpc, a po stronie Pythona napisz sobie (tips&tricks: napisałem Ci już poniżej) wielowątkowy serwer i masz komunikację.

Kod
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import SocketServer
import SimpleXMLRPCServer

IP_ADDRESS = '127.0.0.1'
PORT = '6666'

def do_request(args):
    print 'Args from PHP: %s' % args

class AsyncXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
    """
    Multi-thread implemantation.
    Threaded mix-in
    """
    pass

if __name__ == '__main__':
    # Register functions and run server.
    server = AsyncXMLRPCServer((IP_ADDRESS, PORT), SimpleXMLRPCServer.SimpleXMLRPCRequestHandler, allow_none=1)
    server.register_function(do_request, 'do_request')

    print 'Listing on %s port %d' % (IP_ADDRESS, PORT)
    server.serve_forever()


Ten post edytował ska 6.08.2009, 17:23:51
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A po chorobę marnować zasoby na pakowanie wszystkiego w XML...?
Go to the top of the page
+Quote Post
ska
post
Post #11





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.03.2007

Ostrzeżenie: (0%)
-----


Cytat(erix @ 6.08.2009, 18:34:41 ) *
A po chorobę marnować zasoby na pakowanie wszystkiego w XML...?

Zapytaj się jego twórców? (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) A może XML został stworzony jako standard przechowywania i reprezentowania danych dla którego transpretne są platformy i języki? hmmm Może właśnie dlatego (oczywiście między innymi) jest wykorzystywany w rozszerzonej wersji RPC standardu RFC 1057? A może dlatego, że słowo API zazwyczaj niesie za sobą coś co się nazywa uniwersalność/standard/rozszerzalność?
Rozumiem, że skoro tak mówisz, dyponujesz benchmarkami dla opakowania dumpowanych obiektów przez XML z wykorzystaniem procedur C; a może tylko powtarzasz zasłyszane głupoty typu "xml to złoo"?

Cytat(erix @ 23.05.2009, 15:03:37 ) *
A nie możesz po prostu sprawdzić, czy plik istnieje? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
No, na plikach/cronem/etc.

Bez jaj ma napisać API, nie księgę gości.

Ten post edytował ska 7.08.2009, 08:58:54
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Rozumiem, że skoro tak mówisz, dyponujesz benchmarkami dla opakowania dumpowanych obiektów przez XML z wykorzystaniem procedur C; a może tylko powtarzasz zasłyszane głupoty typu "xml to złoo"?

Nie mówię, że zło, tylko w tym konkretnym przypadku jest to niepotrzebny narzut - rozumiem - międzyplatformowo, ale na tym samym hoście, w jego konkretnym skrypcie lepiej po prostu strzelać czystym tekstem z jakimś separatorem albo w ostateczności przez JSON (napisanie jakiegoś prostego protokołu byłoby banalne).

XML nie jest zły, ale w tym konkretnym zastosowaniu IMHO mocno przesadzony.
Go to the top of the page
+Quote Post
ska
post
Post #13





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 28.03.2007

Ostrzeżenie: (0%)
-----


Cytat(erix @ 7.08.2009, 12:32:33 ) *
Nie mówię, że zło, tylko w tym konkretnym przypadku jest to niepotrzebny narzut - rozumiem - międzyplatformowo, ale na tym samym hoście, w jego konkretnym skrypcie lepiej po prostu strzelać czystym tekstem z jakimś separatorem albo w ostateczności przez JSON (napisanie jakiegoś prostego protokołu byłoby banalne).

XML nie jest zły, ale w tym konkretnym zastosowaniu IMHO mocno przesadzony.

A od kiedy pod poleceniem "zaprojektować API" kryje się skrypcik na jednym hoście ? Tutaj nie rozumiesz, zadaniem jest opracowanie API działającego w wiekszości popularnych środowisk i sytuacji, a nie dla jednego przykładu odpalanego na localhost.
Go to the top of the page
+Quote Post
carbolymer
post
Post #14





Grupa: Zarejestrowani
Postów: 102
Pomógł: 12
Dołączył: 27.01.2007
Skąd: north              Poziom: 158                     Tytuł: Miszcz

Ostrzeżenie: (0%)
-----


Może zamiast XMLRPC, użyć RPC ?
Spróbuj Pipe'ami (proc_open), imo najlepsze rozwiązanie (tylko dopilnuj blokowania rurek ;] ). Możesz też użyć pamięci współdzielonej (prostsze od pipe'ów), semafor, plików w których będą zakolejkowane komendy, socketów do komunikacji między procesami, lub też ostatecznie przez parametry wywołania, ale ta ostatnia opcja jest nieplastyczna, bo przekazać instrukcje możesz tylko raz.

Jest w czym wybierać. Wszystko ładnie opisane na google.

Ten post edytował carbolymer 7.08.2009, 11:42:39
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 20:27