Google Places API가 주는 결과 중 하나인 리뷰는 사람들에게 특정한 곳에 대한 평가를 내리는 것이기 때문에, 나는 매우 중요시 여긴다.

그런데 결과를 가져올 때, 평점도 가져와야하는데 여러 기준이 있다.

overall(전체), food(맛), decor(인테리어), service(서비스), facilities(시설) 등 수많은 기준이 있다.

overall의 경우 문제가 될 것이 없다.

overall은 '전체' 기준이기 때문에 평점을 1개만 주면 되지만, 다른 기준으로 주면 3개를 주어야 한다. 예를 들어

food를 주면 decor과 service도 같이 평점을 줘야한다. 그렇게 설정되어 있다.

ex)

"aspects" : [
               {
                  "rating" : 2,
                  "type" : "overall"
               }
            ]

overall(전체)는 한개만 주기 때문에 쉽게 가져올 수 있었다.

하지만 다른 기준으로 설정하면

"aspects" : [ { "rating" : 3, "type" : "food" }, { "rating" : 3, "type" : "decor" }, { "rating" : 3, "type" : "service" } ] 이런 경우 3개를 가져와야 한다.

진짜 문제는 overall과 다른 기준이 섞여 있는 경우다.

"reviews" : [ { "aspects" : [ { "rating" : 3, "type" : "overall" } ], "author_name" : "Google 사용자", "text" : "좋아요", "time" : 1322395747 }, { "aspects" : [ { "rating" : 0, "type" : "overall" } ], "author_name" : "Google 사용자", "text" : "안좋아요.", "time" : 1306676342 }, { "aspects" : [ { "rating" : 3, "type" : "overall" } ], "author_name" : "Google 사용자", "text" : "매우 좋아요.", "time" : 1323514896 }, { "aspects" : [ { "rating" : 3, "type" : "food" }, { "rating" : 3, "type" : "decor" }, { "rating" : 3, "type" : "service" } ], "author_name" : "James Yang", "author_url" : "https://plus.google.com/104680883154257434480", "text" : "모든 것이 다 좋아요.", "time" : 1349590648 } ]

이런 경우를 ArrayList로 저장하면 이렇게 된다.

ArrayList rating = {3,0,3,3,3,3}

ArrayList author_name = {Google 사용자,Google 사용자,Google 사용자,James Yang}

Google 사용자들은 overall로 평점을 주었기 때문에, 한개만 결과를 준다.

하지만 James Yang의 경우 food, decor, service를 주었기 때문에 결과를 3개나 준다.

for(int i=0; i<author_name.size(); i++){

System.out.println(author_name.get(i)+"\n"+rating.get(i));

}

이렇게 되면 rating의 결과는 이렇게 출력된다. 3,0,3,3 // 뒤에 3,3이 빠짐

for(int i=0; i<rating.size(); i++){

System.out.println(author_name.get(i)+"\n"+rating.get(i));

}

이렇게 하면 또 오류가 발생한다. 6개를 출력해야 하는데 author_name은 4개밖에 없기 때문이다.

이제 해결책을 찾아보자.

일단 overall은 무시하자 문제는 food같은 3개를 주어야하는 평점기준들이다.

다행힌 점은 food, decor, service 3개를 주면 food가 무조건 먼저 나오기 때문에

가져올 때 type이 food인지 아닌지 확인해주면 된다.

food이면 food와 그 뒤에 있는 decor와 service를 하나의 변수에 저장하면 된다.

그러면 1개가 되기 때문에 제대로 출력이 된다.

3개 묶음

appeal, facilities, service

quality, appeal, service

food, decor, service

.....

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
by JamesY 2012. 10. 8. 21:35