Oppure

Loading
05/08/16 15:51
macco_cl
Ciao a tutti!

Come da titolo ho la necessità di inviare dei pacchetti contenenti dei dati del giroscopio interno del telefono ad un server in modo che li possa poi salvare sul database

L'invio dei pacchetti avviene tramite un'app, la quale prepara i dati da inviare e li invia al server tramite http in formato json, l'app è già pronta (ma non è stata sviluppata da me) il mio compito è quello di creare un server che possa essere sempre in ascolto sulla porta 80 e collezionare questi pacchetti.

Quello che avevo pensato ad un primo momento era di utilizzare i socket solo che mi sono accorto che essendo l'ip del cellulare dinamico non posso impostare un ip fisso a cui il server può rispondere e quindi mi sono bloccato.

Ho letto molta documentazione sui socket in python ma non riesco a capire in che modo posso utilizzarli, in questo caso specifico.

In che modo posso mettermi in ascolto di questi pacchetti e decodificarli con json?

Di seguito posto il codice che stavo sviluppando:

import socket
import urllib2

if __name__ == "__main__":
    """Main function that starts the server"""

    # Creates TCP socket in the specified IP address and port
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((socket.gethostname(), "80"))

    # Starts server, up to 10 clients are queued
    s.listen("5")




    while True:

        try:
            print "start loop"
            conn, addr = s.accept()
            url = ?????   #qui non so che url mettere visto che il mio IP è dinamico
            response = urllib2.urlopen(url)
            lettura = response.read()
            my_dict = json.loads(lettura)


            
        except:
            print "errore"


Il codice che sto sviluppando è corretto? posso procedere in questa direzione o sto sbagliando?


Mi scuso anticipatamente se la mia domanda dovesse essere banale, ma sto cercando di imparare e vorrei farlo nel miglior modo possibile.
aaa
07/08/16 23:43
TheDarkJuster
esistono molti framework web per il python. Non ce bisogno di reinventare la ruota scrivendo un altro server http.

P.S. perchè vuoi un filtro ip? Hai una app creata per un solo dispositivo?
Ultima modifica effettuata da TheDarkJuster 07/08/16 23:44
aaa
09/08/16 10:19
macco_cl
Ciao, ti ringrazio per la risposta, sto attualmente leggendo un manuale di Django ma non capisco in che modo posso prendere le informazioni dall'url che mi arriverà e salvarle sul DB.

Scusa ma non ho capito la tua domanda, potresti spiegarmi cosa intendi con filtro ip?

L'applicazione manderà i dati solamente al server in formato Json, il server dovrà essere in ascolto e salvare le informazioni ricevute dall'app in un DB.

Attualmente sto lavorando su questo codice:

Client python che invia una variabile in Json a quello che dovrebbe essere il server che sto sviluppando con Django:

Client.py

import json
import urllib2

data = {
        'ids': ["ciao", "miao", "bau"]
}

req = urllib2.Request('http://127.0.0.1:8000/value/')
req.add_header('Content-Type', 'application/json')

response = urllib2.urlopen(req, json.dumps(data))



Django view.py

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
import json
from models import *

from django.http import StreamingHttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def value(request):
    
    try:
        data = json.loads(request.body)
        label = data['label']
        url = data ['url']
        print label, url
    #data = json_data['data']
    except:
        return HttpResponse("Malformed data!")
    return HttpResponse("Got json data")



Solo che ho problemi in questo codice e non capisco il perché, mi ritorna sempre "Malformed data!"

Sbaglio qualcosa nel file python?

Il codice è sbagliato o come punto di partenza ci sono? :(
Ultima modifica effettuata da macco_cl 09/08/16 16:08
aaa