Работа с API .

Ответить
phenomenon
Сообщения: 22
Зарегистрирован: 17 апр 2013, 17:59

Работа с API .

Сообщение phenomenon » 05 июн 2013, 14:25

Помогите разобраться.
На собеседовании попросили сделать следующее.
Программа выводит список фоток с сайта http://www.panoramio.com . когда нажимаешь по фото открывается браузер с фоткой.
Нужно использовать для получения списка фоток API rest их(http://www.panoramio.com).

Мои знания это основы джава и уроки по андроид на сайте
Вопросы:
1) Объясните пожалуйста что такое rest ?
2) Искал в интернете примеры подлючения API к приложению андроид не нашел, как это делается? и как использовать.
3) Скиньте плиз если кто знает примеры работы с API разными для андроида для чайников. Спасибо!

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Работа с API .

Сообщение klblk » 05 июн 2013, 15:10

1) мб имеется ввиду что-нибудь типа: http://habrahabr.ru/post/176729/, к слову первая гугл-ссылка по запросу "api rest android"
2) как я понял там API на JavaScript, тут ничем помочь не могу
3) к каждому API как правило индивидуальный подход (от простого привязывания .jar библиотеки, до компиляции нативной библиотеки с помощью NDK. В твоём случае ни то ни другое не подойдет)

phenomenon
Сообщения: 22
Зарегистрирован: 17 апр 2013, 17:59

Re: Работа с API .

Сообщение phenomenon » 05 июн 2013, 15:14

да видел это статью.. но она рассказывает как лучше сделать.. мне бы самый простой вариант понять.
Дали на эту задачку 1 час. Сказали сделать по простому, просто хотят посмотреть ход мысли. Если час дали значит что то не сложное должно быть..
а я даже не знаю с какого конца подойти.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Работа с API .

Сообщение rezak90 » 05 июн 2013, 18:08

phenomenon писал(а):Помогите разобраться.
На собеседовании попросили сделать следующее.
Программа выводит список фоток с сайта http://www.panoramio.com . когда нажимаешь по фото открывается браузер с фоткой.
Нужно использовать для получения списка фоток API rest их(http://www.panoramio.com).

Мои знания это основы джава и уроки по андроид на сайте
Вопросы:
1) Объясните пожалуйста что такое rest ?
2) Искал в интернете примеры подлючения API к приложению андроид не нашел, как это делается? и как использовать.
3) Скиньте плиз если кто знает примеры работы с API разными для андроида для чайников. Спасибо!
то что собеседование пытаетесть пройти это хорошо, но очень рано судя по тому что задаёте такие вопросы... на счёт апи было бы время то сейчас объяснил бы, а так побежал домой уже
R.id.team
Политика на форуме запрещена

phenomenon
Сообщения: 22
Зарегистрирован: 17 апр 2013, 17:59

Re: Работа с API .

Сообщение phenomenon » 05 июн 2013, 19:07

Функционал я уже разобрался как написать :) . В андроид пустяки добавить.

Код: Выделить всё

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.*;

public class JsonGet {

    /**
     * @param args
     * @throws JSONException 
     */
    public static void main(String[] args) throws JSONException {
        // TODO Auto-generated method stub
        ArrayList<PanoramioPhoto> list = new ArrayList<PanoramioPhoto>();
        String link =  "http://www.panoramio.com/map/get_panoramas.php?set=public&from=0&to=20&minx=-180&miny=-90&maxx=180&maxy=90&size=medium&mapfilter=true";
        String result = requestGET(link);
        int beginIndex = result.indexOf('[');
        int endIndex = result.length()-1;
        String resultFixed = result.substring(beginIndex, endIndex);
        JSONArray jArray = new JSONArray(resultFixed);
        for (int i=0;i<jArray.length();++i)
        {
            PanoramioPhoto photo = new PanoramioPhoto();
            photo.setPhoto_id(jArray.getJSONObject(i).getString("photo_id"));
            photo.setPhoto_title(jArray.getJSONObject(i).getString("photo_title"));
            photo.setPhoto_url(jArray.getJSONObject(i).getString("photo_url"));
            list.add(photo);
        }
        //for (PanoramioPhoto photo : list)
        //{
        //    System.out.println(photo.getPhoto_id());
        //}
        }
    static public String requestGET(String address) {
        String result="";
        try {
            URL url = new URL(address);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            
            conn.setRequestProperty("User-Agent", "Java bot");
            
            conn.connect();
            
            int code=conn.getResponseCode();
            
            if (code==200) {
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
              
                String inputLine;
        
                while ((inputLine = in.readLine()) != null) {
                    result+=inputLine;
                }
                
                in.close();
            }
            
            conn.disconnect();
            conn=null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return result;
}

}
Последний раз редактировалось phenomenon 05 июн 2013, 19:11, всего редактировалось 1 раз.

phenomenon
Сообщения: 22
Зарегистрирован: 17 апр 2013, 17:59

Re: Работа с API .

Сообщение phenomenon » 05 июн 2013, 19:11

Опыт приходит со временем) я не говорю что я спец в этих вешай. Опыт что спрашивают на собеседованиях тоже лишним не будет.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Работа с API .

Сообщение rezak90 » 05 июн 2013, 19:56

1) первое и самое не приятное что кинулось в глаза:

Код: Выделить всё

int beginIndex = result.indexOf('['); 
        int endIndex = result.length()-1; 
        String resultFixed = result.substring(beginIndex, endIndex); 
хочется просто услышать в ответ, зачем?
2) неправильное обрабатывание ошибки в методе requestGET, если она произойдёт на момент считывание BufferedReader то поток останется открытым
3) вот такое тоже не очень красиво:

Код: Выделить всё

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
4) хотел скопировать, указать на ошибки с конкатинацией, но их слишком много, в общем немного относится к первому вопросу, зачем? много лишних движений со строками.
5) нужно немножко поработать над красотой кода, константы как правило выносятся в поля класса.
R.id.team
Политика на форуме запрещена

phenomenon
Сообщения: 22
Зарегистрирован: 17 апр 2013, 17:59

Re: Работа с API .

Сообщение phenomenon » 06 июн 2013, 21:10

rezak90 писал(а):1) первое и самое не приятное что кинулось в глаза:

Код: Выделить всё

int beginIndex = result.indexOf('['); 
        int endIndex = result.length()-1; 
        String resultFixed = result.substring(beginIndex, endIndex); 
хочется просто услышать в ответ, зачем?
там инфа такого формата
{
"count": 773840,"photos": [
{
"photo_id": 532693,
"photo_title": "Wheatfield in afternoon light",
"photo_url": "http://www.panoramio.com/photo/532693",
"photo_file_url": "http://static2.bareka.com/photos/medium/532693.jpg",
"longitude": 11.280727,
"latitude": 59.643198,
"width": 500,
"height": 333,
"upload_date": "22 January 2007",
"owner_id": 39160,
"owner_name": "Snemann",
"owner_url": "http://www.panoramio.com/user/39160",
},
{
"photo_id": 505229,
"photo_title": "Etangs près de Dijon",
"photo_url": "http://www.panoramio.com/photo/505229",
"photo_file_url": "http://static2.bareka.com/photos/medium/505229.jpg",
"longitude": 5.168552,
"latitude": 47.312642,
"width": 350,
"height": 500,
"upload_date": "20 January 2007",
"owner_id": 78506,
"owner_name": "Philippe Stoop",
"owner_url": "http://www.panoramio.com/user/78506"
}, ...
]
}

Код: Выделить всё

JSONArray jArray = new JSONArray(resultFixed);
ругается если текст начинатся с { , он тока то что между [] обрабатывает.
а остальном да много недочетов.. я джаву и андроид учу 2 месяца. от силы. новичок)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Работа с API .

Сообщение rezak90 » 06 июн 2013, 22:02

ругается если текст начинатся с { , он тока то что между [] обрабатывает.
всё нормально, json валидный, нужно сначала объект получить а потом массив, массивы обвёртываются в квадратные скобки, а объекты в фигурные
R.id.team
Политика на форуме запрещена

phenomenon
Сообщения: 22
Зарегистрирован: 17 апр 2013, 17:59

Re: Работа с API .

Сообщение phenomenon » 06 июн 2013, 22:28

терь буду знать, спс )

Ответить