问题
I am planning to develop a very simple java application (not mobile, but desktop apps) that utilizes web services, specifically Foursquare API and Google Map Web Service. I plan to get the users address and then using Google Map to translate the address to lattitude and longitude then feed this result to foursquare API method Venue methods (Nearby and search) to get a results of nearby venues and show it to users. The question are:
- Is this all do able in Java?
- How do I call such http://api.foursquare.com/v1/venues in java and get the result? I know I can use Xpath to parse the result. I am just not sure on how to call those post methods in java and pass in parameters to it.
- Is there any sample java code that uses foursquare API out there?
- Will the foursquare API work if it's used not on mobile?
Sorry for all the noob questions.
回答1:
- Yes, it's possible, but I don't know the FourSquare API well enough to answer with 100% confidence.
- Make a URL connection to that URL and create a GET or POST request that conforms to their API.
- Google is your friend.
- You can certainly make HTTP requests. It's another matter what you do with the results.
UPDATE:
I'm not signed up at FourSquare. Try this out and let me know if it works for you:
package foursquare;
import java.io.*;
import java.net.Authenticator;
import java.net.URL;
/**
* FourSquareDemo
* User: Michael
* Date: 10/19/10
* Time: 7:53 PM
*/
public class FourSquareDemo
{
private static final int DEFAULT_CAPACITY = 4096;
private static final String DEFAULT_URL = "http://api.foursquare.com/v1/";
private static final String DEFAULT_EMAIL = "you@gmail.com";
private static final String DEFAULT_PASSWORD = "password";
public static void main(String[] args)
{
long startTime = System.currentTimeMillis();
long endTime = 0L;
try
{
String downloadSite = ((args.length > 0) ? args[0] : DEFAULT_URL);
URL url = new URL(downloadSite + "history");
Authenticator.setDefault(new BasicAuthenticator(DEFAULT_EMAIL, DEFAULT_PASSWORD));
String contents = readFromUrl(url);
PrintStream ps = ((args.length > 1) ? new PrintStream(new FileOutputStream(new File(args[1]))) : System.out);
printToStream(ps, contents);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
endTime = System.currentTimeMillis();
System.out.println("wall time: " + (endTime - startTime) + " ms");
}
}
private static void printToStream(PrintStream ps, String contents) throws IOException
{
ps.println(contents.toString());
ps.close();
}
private static String readFromUrl(URL url) throws IOException
{
StringBuilder contents = new StringBuilder(DEFAULT_CAPACITY);
BufferedReader br = null;
try
{
InputStream is = url.openConnection().getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String line;
String newline = System.getProperty("line.separator");
while ((line = br.readLine()) != null)
{
contents.append(line).append(newline);
}
}
finally
{
try
{
if (br != null)
{
br.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
return contents.toString();
}
}
回答2:
Foursqare API uses simple HTTP get methods (a.k.a RESTful web service). There are many ways to call RESTful web-services in Java, see:
- Implementing RESTful Web Services in Java - shows JAX-RS, also uses JSON (which can be used in Foursquare, instead of XML)
- Apache CXF - a popular framework for web-services, also supports creating RESTful clients.
来源:https://stackoverflow.com/questions/3972477/foursquare-api-and-java