package com.ved.musicmapapp.providers; import java.io.IOException; import java.net.URLEncoder; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.os.AsyncTask; import android.util.Log; import android.util.Pair; import com.facebook.android.Util; import com.ved.musicmapapp.services.UpdateLocationService; import com.ved.musicmapapp.utils.Statics; import com.ved.musicmapapp.utils.Utils; import com.ved.musicmapapp.utils.XMLParse; public abstract class GetTrackPreview extends AsyncTask<Void, Void, Pair<String, String>> { public static final String _7DIGITAL_API_LINK = "http://api.7digital.com/1.2/"; public static final String _7DIGITAL_API_TRACK_SEARCH = "track/search"; public static final String _7DIGITAL_API_KEY = "7dvgzk7twy2f"; public static final String _7DIGITAL_API_TRACK_VIEW = "track/preview"; public static final String _7DIGITAL_API_TRACK_DETAIL = "track/details"; private String mError; private ProgressDialog mProgressDialog; private Context context; private String track; private String artist; private boolean showDialog; int itemCount = 0; public GetTrackPreview(Activity context, String track, String artist, boolean showDialog) { Log.i("check","In GetTrackPreview"); mError = null; mProgressDialog = new ProgressDialog(context); mProgressDialog.setMessage("Getting track link..."); mProgressDialog.setCancelable(true); mProgressDialog .setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { GetTrackPreview.this.cancel(true); } }); this.context = context; this.track = track; if(!artist.toLowerCase().contains("unknown")){ this.artist = artist; } else{ this.artist=""; } this.showDialog = showDialog; } @Override protected Pair<String, String> doInBackground(Void... params) { try { StringBuilder url = new StringBuilder(_7DIGITAL_API_LINK); url.append(_7DIGITAL_API_TRACK_SEARCH); url.append("?pageSize=50&q=" + URLEncoder.encode(track.trim(), "UTF-8") + "+" + URLEncoder.encode(artist.trim(), "UTF-8")); url.append("&oauth_consumer_key=" + _7DIGITAL_API_KEY); // Pair<Double, Double> loc = UpdateLocationService.getLastLocation(context); // String country = Utils.getCountryName(context, loc.first, loc.second);// String country = context.getResources().getConfiguration().locale.getCountry(); if (country != null && country.length() > 0) url.append("&country=" + country); Log.e("check","url for trackID:/// "+url); HttpParams httpParameters = new BasicHttpParams(); int timeoutConnection = 20000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); int timeoutSocket = 20000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); HttpGet httpGet = new HttpGet(url.toString()); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity httpEntity = httpResponse.getEntity(); String xml = EntityUtils.toString(httpEntity); Pair<String, String> trackDetail = getTrackId(xml); if (itemCount == 0 && trackDetail == null) { mError = "Track not found"; return null; } else if(itemCount > 0 && trackDetail == null){ trackDetail = getFirstTrackId(xml); } return trackDetail; } catch (Exception e) { e.printStackTrace(); mError = "Network unavailable!"; } return null; } @Override protected void onPreExecute() { if (showDialog) { mProgressDialog.show(); } super.onPreExecute(); } @Override protected void onPostExecute(Pair<String, String> result) { if (mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } // Error if (result == null) { onError(mError); } else { onSucess(result); } super.onPostExecute(result); } public abstract void onSucess(Pair<String, String> trackDetail); public abstract void onError(String error); private Pair<String, String> getTrackId(String resultXml) { Document doc = XMLParse.getDomElement(resultXml); if (doc == null) { return null; } String trackId = null, linkToBuySong = null; boolean isFound = false; Node results = doc.getFirstChild().getFirstChild(); NodeList childNodes = results.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { if (childNodes.item(i).getNodeName().equals("totalItems")) { itemCount = Integer.parseInt(childNodes.item(i).getTextContent()); if (itemCount == 0) { return null; } } else if (childNodes.item(i).getNodeName().equals("searchResult")) { NodeList resultNodes = childNodes.item(i).getChildNodes(); for (int j = 0; j < resultNodes.getLength(); j++) { if (resultNodes.item(j).getNodeName().equals("track")) { trackId = resultNodes.item(j).getAttributes().item(0).getTextContent(); NodeList trackNodes = resultNodes.item(j).getChildNodes(); String title = ""; for (int k = 0; k < trackNodes.getLength(); k++) { if (trackNodes.item(k).getNodeName().equals("title")) { title = trackNodes.item(k).getTextContent(); /*if (!trackNodes.item(k).getTextContent().toLowerCase().contains(track.toLowerCase()) && Statics.similarText(trackNodes.item(k).getTextContent(),track) < 75) { break; }*/ } else if (trackNodes.item(k).getNodeName().equals("artist")) { String artistName = trackNodes.item(k).getChildNodes().item(0).getTextContent(); if (artistName.toLowerCase().contains(artist.toLowerCase()) || Statics.similarText(artistName, artist) >= 75) { Log.d("Track", title + " - " + artistName); isFound = true; } } else if (trackNodes.item(k).getNodeName().equals("url")) { linkToBuySong = trackNodes.item(k).getTextContent(); // break; } } } if (isFound) { break; } } } if (isFound) { break; } } if (!isFound) { return null; } Log.e("check","trackId:// "+trackId+" linkToBuySong ://"+linkToBuySong); return new Pair<String, String>(trackId, linkToBuySong); } private Pair<String, String> getFirstTrackId(String resultXml) { Document doc = XMLParse.getDomElement(resultXml); if (doc == null) { return null; } String trackId = null, linkToBuySong = null; boolean isFound = false; Node results = doc.getFirstChild().getFirstChild(); NodeList childNodes = results.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { if (childNodes.item(i).getNodeName().equals("totalItems")) { // itemCount = Integer.parseInt(childNodes.item(i).getTextContent()); // if (itemCount == 0) { // return null; // } } else if (childNodes.item(i).getNodeName().equals("searchResult")) { NodeList resultNodes = childNodes.item(i).getChildNodes(); for (int j = 0; j < resultNodes.getLength(); j++) { if (resultNodes.item(j).getNodeName().equals("track")) { trackId = resultNodes.item(j).getAttributes().item(0).getTextContent(); NodeList trackNodes = resultNodes.item(j).getChildNodes(); String title = ""; for (int k = 0; k < trackNodes.getLength(); k++) { if (trackNodes.item(k).getNodeName().equals("title")) { title = trackNodes.item(k).getTextContent(); } else if (trackNodes.item(k).getNodeName().equals("artist")) { String artistName = trackNodes.item(k).getChildNodes().item(0).getTextContent(); // if (artistName.toLowerCase().contains(artist.toLowerCase()) || Statics.similarText(artistName, artist) >= 75) { Log.d("Track", title + " - " + artistName); isFound = true; } } else if (trackNodes.item(k).getNodeName().equals("url")) { linkToBuySong = trackNodes.item(k).getTextContent(); break; // break; } } } if (isFound) { break; } } } if (isFound) { break; } } if (!isFound) { return null; } Log.e("check","trackId:// "+trackId+" linkToBuySong ://"+linkToBuySong); return new Pair<String, String>(trackId, linkToBuySong); } @Override protected void onCancelled() { if (mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } super.onCancelled(); } }