'검색api'에 해당되는 글 3건

검색 엔진은 아니더라도, twitter에도 검색 하는  api를 제공하고 있어서 만들어본 twitter 검색하는 방법.

트위터는 아주 바람직한 서비스인것 같다, 어떤 트윗들이 요새 떠다니는지 검색도 할수 있게 해주고, 

또 여러가지 옵션으로 원하는대로 검색을 할수 있으니!!!


그리고 JSON을 지원해줌..(나는 JSON을 너무 사랑함ㅋㅋㅋㅋ, 영어 이름을 jason이라고 지을까 싶다..)


https://dev.twitter.com/docs/api/1/get/search  --> 너무나 간단한 Twitter 검색 API 사용법.



package com.hopeisagoodthing.searchtool;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;


public class TwitterSearch implements ISearch
{
	private static final String TAG = "TwitterSearch";
	private static final String BASE_URL = "https://search.twitter.com/search.json";
	private static final String[] TARGETS = new String[]{"?"};
		
	private static final String RESULT_TYPE ="recent";
	private static final class PARAM{		
		private static final String QUERY = "q=";// always start with this parameter!!!		
		private static final String RESULT_SIZE = "&rpp=";
		private static final String RESULT_TYPE = "&result_type=";		
	}	
	private static final String RESULTS = "results";				// json array.
	private static final String TEXT = "text";				// json obj
	
	private final List<String> mAnalyzedList = new ArrayList<String>();
	
	@Override
	public List<String> getAnalyze(final String query, final int resultSize, final IAnalyzer analyzer) {		
		mAnalyzedList.clear();		
		
		final StringBuilder builder = new StringBuilder();
		for(String target : TARGETS)
		{
			URL url = null;
			try {
				url = new URL(	BASE_URL + target+									
									PARAM.QUERY + URLEncoder.encode(query, "UTF-8") + 
									PARAM.RESULT_TYPE+RESULT_TYPE+
									PARAM.RESULT_SIZE+resultSize*20);
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
			
			builder.setLength(0);
			try {
				URLConnection connection = null;
				String line = null;			
				BufferedReader reader = null;
				connection = url.openConnection();
				//connection.addRequestProperty("Referer", /* Enter the URL of your site here */);
				reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
				while((line = reader.readLine()) != null) {
					 builder.append(line);
				}				 
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

			try {
				Log.e(TAG,"Google Result START============================================================");
				final JSONObject json = new JSONObject(builder.toString());
				final JSONArray resultArray = json.getJSONArray(RESULTS);
				
				final int arraySize = resultArray.length();
				for(int i = 0; i< arraySize ; i++)
				{
					final JSONObject result = resultArray.getJSONObject(i);
					final String content = result.getString(TEXT);					
					analyzer.analyze(content,mAnalyzedList);				
				}
				Log.e(TAG,"Google Result END ============================================================");
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return mAnalyzedList;		
	}	
}


블로그 이미지

rekun,ekun 커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

댓글을 달아 주세요

구글은 Cusom Search API라는 유료 검색 모델을 지금 엄청 밀고 있는 중인데, 검색  api를 사용하기 위해서 돈을 지불하면서 까지 사용해야 하는 의문이 생겨서, 이전까지 무료로 제공되던 web search api를 사용했다.(이것도 곧 ... 없어질지도 모르겠다. ㅠ.ㅠ)


구글이 자꾸 왜 그러는건지 .... Google App Engine도 과금정책을 바꿔서 기존까지 무료로도 이용이 가능하던 서비스들이 이제는 돈을 낼수 밖에 없는 모델로 계속 바꾸고 있는 것 같다.  



https://developers.google.com/web-search/docs/ --> 현재는 deprecated 되어서 구글의 정책에 의해서 지원이 중단될지도 모르지만, web search api 있는 곳


구글의 검색 api는 JSON을 역시 지원하고, 아래 굵은 표시 된 부분을 조심해서 사용해주면 된다. 버전 설정이라던지 사이즈 설정이라던지 하는 부분이 잘못되면 에러만 리턴된다.



package com.hopeisagoodthing.searchtool;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;


public class GoogleSearch implements ISearch
{
	private static final String TAG = "GoogleSearch";
	private static final String BASE_URL = "https://ajax.googleapis.com/ajax/services/search/";
	private static final String[] TARGETS = new String[]{"web?","news?","blogs?"};
	private static final String VERSION="1.0";	
	private static final int START = 1;
	private static final class PARAM{
		private static final String VERSION = "v=";	// always start with this parameter!!!
		private static final String QUERY = "&q=";		
		private static final String START = "&start=";
		private static final String RESULT_SIZE = "&rsz=";
	}	
	private static final String RESPONSE_DATA = "responseData";	// json obj
	private static final String RESULTS = "results";				// json array.
	private static final String CONTENT = "content";				// json obj
	
	private final List<String> mAnalyzedList = new ArrayList<String>();
	
	@Override
	public List<String> getAnalyze(final String query, final int resultSize, final IAnalyzer analyzer) {		
		mAnalyzedList.clear();	


		int realResultSize = 8;
		if(resultSize < 9)
		{
			realResultSize = resultSize;
		}
		
		final StringBuilder builder = new StringBuilder();
		for(String target : TARGETS)
		{
			URL url = null;
			try {
				url = new URL(	BASE_URL + target+
									PARAM.VERSION+VERSION+
									PARAM.QUERY + URLEncoder.encode(query, "UTF-8") + 
									PARAM.START +START+
									PARAM.RESULT_SIZE+realResultSize);
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			
			
			builder.setLength(0);
			try {
				URLConnection connection = null;
				String line = null;			
				BufferedReader reader = null;
				connection = url.openConnection();
				//connection.addRequestProperty("Referer", /* Enter the URL of your site here */);
				reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
				while((line = reader.readLine()) != null) {
					 builder.append(line);
				}				 
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

			try {
				Log.e(TAG,"Google Result START============================================================");
				final JSONObject json = new JSONObject(builder.toString());
				final JSONObject resultsJson = json.getJSONObject(RESPONSE_DATA);
				final JSONArray resultArray = resultsJson.getJSONArray(RESULTS);
				
				final int arraySize = resultArray.length();
				for(int i = 0; i< arraySize ; i++)
				{
					final JSONObject result = resultArray.getJSONObject(i);
					final String content = result.getString(CONTENT);
					analyzer.analyze(content,mAnalyzedList);				
				}
				Log.e(TAG,"Google Result END ============================================================");
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return mAnalyzedList;		
	}	
}
블로그 이미지

rekun,ekun 커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

댓글을 달아 주세요

오늘은 Naver에서 제공하는 검색 api를 사용해보자.


네이버는 다른 검색 엔진과는 다르게 XML 로만 결과를 제공해주고 있는것 같다, 개인적으로 JSON 사용하는 것을 좋아하는데, Naver에 실망했다 .ㅠ.ㅠ

모든 클래스를 다 똑같이 만들려고 했는데 ... XML파서를 넣어줘야 .....


아래 코드도 크게 다르지 않게 그대로 필요한 부분만 가져다 쓰면 되고, 쿼리 결과를 처리하는 부분이 xml파싱하는 부분이라서, 가장 간단한 방법으로 파싱했다.


http://dev.naver.com/openapi/ --> 네이버 api 사이트

http://dev.naver.com/openapi/apis/search/rank --> 검색 api만 사용하려면 여기로..


네이버도 api를 사용하기 위해서는 개발자의 api key를 발급받아야  한다.


검색 api등등을 사용할때는 사실 많은 공부가 필요하지 않은것 같다, 아래 샘플 코드를 가지고 가서 필요한 부분만 검색하기만 하면 되니까.




package com.hopeisagoodthing.searchtool;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.util.Log;


public class NaverSearch implements ISearch
{
	private static final String TAG = "NaverSearch";
	private static final String BASE_URL = "http://openapi.naver.com/search?";
	private static final String API_KEY="여기에 역시 자신의 api key를 넣어준다.";
	private static final String[] TARGETS = new String[]{"webkr","news","blog","cafearticle"};
	private static final int START = 1;
	private static final class PARAM{
		private static final String API_KEY = "key=";	// always start with this parameter!!!
		private static final String QUERY = "&query=";
		private static final String TARGET = "&target=";
		private static final String START = "&start=";
		private static final String DISPLAY = "&display=";
	}	
	
	private final List<String> mAnalyzedList = new ArrayList<String>();
	
	
	
	@Override
	public List<String> getAnalyze(final String query, final int resultSize, final IAnalyzer analyzer) {
		boolean inDesc = false;	
		String desc = null;
		mAnalyzedList.clear();
		
		for(String target : TARGETS)
		{
			URL url = null;
			try {
				url = new URL(	BASE_URL + 
									PARAM.API_KEY+API_KEY + 
									PARAM.QUERY + URLEncoder.encode(query, "UTF-8") +
									PARAM.TARGET+ target+
									PARAM.START+START+
									PARAM.DISPLAY+resultSize);
				
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
			
			try {			
				final XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
				final XmlPullParser parser = parserCreator.newPullParser();
				parser.setInput(url.openStream(), null);
				
				int parserEvent = parser.getEventType();
				
				Log.e(TAG,"NAVER Result START============================================================");
				while (parserEvent != XmlPullParser.END_DOCUMENT) {
					switch (parserEvent) {
					case XmlPullParser.START_TAG:
						if (parser.getName().equals("description")) {
							inDesc = true;
						}
						
						break;

					case XmlPullParser.TEXT:
						if (inDesc) {
							desc = parser.getText();
							inDesc = false;
							analyzer.analyze(desc, mAnalyzedList);
						}
						
						break;
					case XmlPullParser.END_TAG:				
						break;
					}
					try {
						parserEvent = parser.next();
					} catch (XmlPullParserException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				Log.e(TAG,"NAVER Result END============================================================");
			} catch (XmlPullParserException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return mAnalyzedList;		
	}	
}
블로그 이미지

rekun,ekun 커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

댓글을 달아 주세요

  • ㄱㅈㅁ 2015.03.25 13:24  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 네이버 api를 가져와야 할 경우가 생겨서 위 코드를 따라해봤는데요! implements ISearch 부분과 final IAnalyzer analyzer 부분에서 오류가 나는데 이유가 뭔지 알수있을까요??ㅜㅜ

    • rekun,ekun 커뉴 2015.03.25 21:22 신고  댓글주소  수정/삭제

      해당 부분은 사실 제가 따로 다른 프로젝트에 붙이기위한 interface를 구현부분으로, 실제 사용하실때는 각 메소드들 부분만 참고하시면 됩니다. 두부분은 제거하시고 사용하시면 됩니다.