{"action":"created","comment":{"url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/comments/46348770","id":46348770,"diff_hunk":"@@ -0,0 +1,335 @@\n+package net.pubnative.library.request;\n+\n+\n+import android.content.Context;\n+import android.location.Location;\n+import android.net.Uri;\n+import android.os.Build;\n+import android.support.annotation.NonNull;\n+import android.text.TextUtils;\n+import android.util.DisplayMetrics;\n+\n+import com.android.volley.Request;\n+import com.android.volley.RequestQueue;\n+import com.android.volley.Response;\n+import com.android.volley.VolleyError;\n+import com.android.volley.toolbox.StringRequest;\n+import com.android.volley.toolbox.Volley;\n+import com.google.gson.Gson;\n+import com.google.gson.reflect.TypeToken;\n+\n+import net.pubnative.library.model.PubnativeAdModel;\n+import net.pubnative.library.utilities.Crypto;\n+import net.pubnative.library.utilities.SystemUtils;\n+\n+import org.json.JSONArray;\n+import org.json.JSONException;\n+import org.json.JSONObject;\n+\n+import java.lang.reflect.Type;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Locale;\n+import java.util.Map;\n+\n+\n+/**\n+ * For every Ad request create new object of this class\n+ */\n+public class PubnativeRequest implements SystemUtils.AndroidAdIDTask.AndroidAdIDTaskListener, Response.Listener<String>, Response.ErrorListener{\n+    protected static final String BASE_URL        =  \"http://api.pubnative.net/api/partner/v2/promotions\";\n+    protected static final String NATIVE_TYPE_URL =  \"native\";\n+    protected static final String VIDEO_TYPE_URL  =  \"video\";\n+\n+    protected Context context;\n+    protected EndPoint endpoint;\n+    protected Map<String, String> requestParameters;\n+    protected Listener listener;\n+\n+    /**\n+     * These are the various types of adds pubnative support\n+     */\n+    public enum EndPoint {\n+        NATIVE\n+    }\n+\n+    public PubnativeRequest(){\n+    }\n+\n+    /**\n+     * These are the various types of parameters\n+     */\n+    public interface Parameters{\n+        String APP_TOKEN                  =      \"app_token\";\n+        String BUNDLE_ID                  =      \"bundle_id\";\n+        String APPLE_IDFA                 =      \"apple_idfa\";\n+        String APPLE_IDFA_SHA1            =      \"apple_idfa_sha1\";\n+        String APPLE_IDFA_MD5             =      \"apple_idfa_md5\";\n+        String ANDROID_ADVERTISER_ID      =      \"android_advertiser_id\";\n+        String ANDROID_ADVERTISER_ID_SHA1 =      \"android_advertiser_id_sha1\";\n+        String ANDROID_ADVERTISER_ID_MD5  =      \"android_advertiser_id_md5\";\n+        String ICON_SIZE                  =      \"icon_size\";\n+        String BANNER_SIZE                =      \"banner_size\";\n+        String OS                         =      \"os\";\n+        String DEVICE_MODEL               =      \"device_model\";\n+        String OS_VERSION                 =      \"os_version\";\n+        String NO_USER_ID                 =      \"no_user_id\";\n+        String PARTNER                    =      \"partner\";\n+        String LOCALE                     =      \"locale\";\n+        String PORTRAIT_BANNER_SIZE       =      \"portrait_banner_size\";\n+        String DEVICE_RESOLUTION          =      \"device_resolution\";\n+        String DEVICE_TYPE                =      \"device_type\";\n+        String AD_COUNT                   =      \"ad_count\";\n+        String ZONE_ID                    =      \"zone_id\";\n+        String LAT                        =      \"lat\";\n+        String LONG                       =      \"long\";\n+        String GENDER                     =      \"gender\";\n+        String AGE                        =      \"age\";\n+        String KEYWORDS                   =      \"keywords\";\n+    }\n+\n+    public interface Listener{\n+        /**\n+         * Invoked when PubnativeRequest request is success\n+         *\n+         * @param request Request object used for making the request\n+         * @param ads     List of ads received\n+         */\n+        void onPubnativeRequestSuccess(PubnativeRequest request, List<PubnativeAdModel> ads);\n+\n+        /**\n+         * Invoked when PubnativeRequest request fails\n+         *\n+         * @param request Request object used for making the request\n+         * @param ex      Exception that caused the failure\n+         */\n+        void onPubnativeRequestFail(PubnativeRequest request, Exception ex);\n+    }\n+\n+    /**\n+     * Sets parameters required to make the pub native request\n+     *\n+     * @param key key name of parameter\n+     * @param value actual value of parameter\n+     */\n+    public void setParameter(String key, String value){\n+        if (requestParameters == null) {\n+            requestParameters = new HashMap<String, String>();\n+        }\n+        if (value == null && !value.isEmpty()) {\n+            requestParameters.remove(key);\n+        }else {\n+            requestParameters.put(key, value);\n+        }\n+    }\n+\n+\n+    /**\n+     * Starts pub native request, This function make the ad request to the pubnative server. It makes asynchronous network request in the background.\n+     *\n+     * @param context\n+     * @param endpoint type of ad (ex: NATIVE)\n+     * @param listener valid listener to track ad request callbacks.\n+     */\n+    public void start(Context context, EndPoint endpoint, @NonNull Listener listener){\n+        this.context = context;\n+        this.listener = listener;\n+        this.endpoint = endpoint;\n+        if (this.listener != null) {\n+            setOptionalParameters();\n+            if (!requestParameters.containsKey(Parameters.ANDROID_ADVERTISER_ID)) {\n+                setAdvertisingId();\n+            }\n+            else {\n+                createNetworkRequest();\n+            }\n+        }\n+    }\n+\n+\n+    /**\n+     *  setting optional parameters to request parameters\n+     */\n+    private void setOptionalParameters() {\n+        if (!requestParameters.containsKey(Parameters.BUNDLE_ID)) {\n+            this.requestParameters.put(Parameters.BUNDLE_ID, SystemUtils.getPackageName(this.context));\n+        }\n+\n+        if (!requestParameters.containsKey(Parameters.OS)) {\n+            requestParameters.put(Parameters.OS, \"android\");\n+        }\n+\n+        if (!requestParameters.containsKey(Parameters.DEVICE_MODEL)) {\n+            requestParameters.put(Parameters.DEVICE_MODEL, Build.MODEL);\n+        }\n+\n+        if (!requestParameters.containsKey(Parameters.OS_VERSION)) {\n+            requestParameters.put(Parameters.OS_VERSION, Build.VERSION.RELEASE);\n+        }\n+\n+        if (!requestParameters.containsKey(Parameters.DEVICE_RESOLUTION)) {\n+            DisplayMetrics dm = this.context.getResources().getDisplayMetrics();\n+            requestParameters.put(Parameters.DEVICE_RESOLUTION, dm.widthPixels + \"x\" + dm.heightPixels);\n+        }\n+        if (!requestParameters.containsKey(Parameters.DEVICE_TYPE)) {\n+            requestParameters.put(Parameters.DEVICE_TYPE, SystemUtils.isTablet(this.context) ? \"tablet\" : \"phone\");\n+        }\n+        if (!requestParameters.containsKey(Parameters.LOCALE)) {\n+            requestParameters.put(Parameters.LOCALE, Locale.getDefault().getLanguage());\n+        }\n+\n+        if (!requestParameters.containsKey(Parameters.LAT) || !requestParameters.containsKey(Parameters.LONG)) {\n+            if (SystemUtils.isLocationPermissionGranted(this.context)) {\n+                Location location = SystemUtils.getLastLocation(this.context);\n+                if (location != null) {\n+                        requestParameters.put(Parameters.LAT, String.valueOf(location.getLatitude()));\n+                        requestParameters.put(Parameters.LONG, String.valueOf(location.getLongitude()));\n+                }\n+            }\n+        }\n+    }\n+\n+\n+    /**\n+     * This function sets the android advertising id if the user has not given.\n+     */\n+    private void setAdvertisingId() {\n+        SystemUtils.getAndroidAdID(this.context, this);\n+    }\n+\n+    /**\n+     *  Android Advertising Id Task Listener is finished when android ad id is fetched.\n+     */\n+    @Override\n+    public void onAndroidAdvertisingIDTaskFinished(String result) {\n+        if (!TextUtils.isEmpty(result)) {\n+            this.requestParameters.put(Parameters.ANDROID_ADVERTISER_ID, result);\n+            this.requestParameters.put(Parameters.ANDROID_ADVERTISER_ID_SHA1, Crypto.sha1(result));\n+            this.requestParameters.put(Parameters.ANDROID_ADVERTISER_ID_MD5, Crypto.md5(result));\n+        } else {\n+            this.requestParameters.put(Parameters.NO_USER_ID, \"1\");\n+        }\n+        createNetworkRequest();\n+    }\n+\n+    /**\n+     * This function is used to create network request.\n+     */\n+    private void createNetworkRequest() {\n+        String url = null;\n+        if (endpoint != null) {\n+            switch (endpoint) {\n+                case NATIVE:\n+                        url = createNativeRequest();\n+                    break;\n+                default:\n+                    throw new IllegalArgumentException(endpoint.toString());\n+            }\n+            sendNetworkRequest(url);\n+        }\n+    }\n+\n+\n+    /**\n+     * @return url of native request\n+     */\n+    private String createNativeRequest() {\n+        Uri.Builder uriBuilder = Uri.parse(this.BASE_URL).buildUpon();\n+        uriBuilder.appendPath(this.NATIVE_TYPE_URL);\n+\n+        for (String key : requestParameters.keySet()) {\n+            String value = requestParameters.get(key);\n+            if (value != null) {\n+                uriBuilder.appendQueryParameter(key, value);\n+            }\n+        }\n+        return uriBuilder.build().toString();\n+    }\n+\n+\n+    /**\n+     * @param url used to send network request\n+     */\n+    private void sendNetworkRequest(String url) {\n+        RequestQueue queue = Volley.newRequestQueue(this.context);\n+        StringRequest strRequest = new StringRequest(Request.Method.GET, url, this, this);\n+        queue.add(strRequest);\n+    }\n+\n+    /**\n+     * responseListener callback calls when network request gets response.\n+     */\n+    @Override\n+    public void onResponse(String response) {\n+        List<PubnativeAdModel> dataModel = parseJsonToAdModel(response);\n+        sendSuccessEvent(dataModel);\n+    }\n+\n+    /**\n+     * errorListener callback calls when network request fails.\n+     */\n+    @Override\n+    public void onErrorResponse(VolleyError error) {\n+        String data = new String(error.networkResponse.data);\n+        int statusCode = error.networkResponse.statusCode;\n+        Exception exception = prepareExceptionFromErrorJson(data, statusCode);\n+        sendFailEvent(exception);\n+    }\n+\n+    /**\n+     * @param data is network response data\n+     * @param statusCode is statusCode from volley response\n+     * @return exception if status is not ok and if there is error while parsing json\n+     */\n+    private Exception prepareExceptionFromErrorJson(String data, int statusCode) {","path":"library/src/main/java/net/pubnative/library/request/PubNativeRequest.java","position":284,"original_position":284,"commit_id":"2e1a37342c22235ea93a5e579d1b15c7f772aacb","original_commit_id":"2e1a37342c22235ea93a5e579d1b15c7f772aacb","user":{"login":"cerberillo","id":422329,"avatar_url":"https://avatars.githubusercontent.com/u/422329?v=3","gravatar_id":"","url":"https://api.github.com/users/cerberillo","html_url":"https://github.com/cerberillo","followers_url":"https://api.github.com/users/cerberillo/followers","following_url":"https://api.github.com/users/cerberillo/following{/other_user}","gists_url":"https://api.github.com/users/cerberillo/gists{/gist_id}","starred_url":"https://api.github.com/users/cerberillo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cerberillo/subscriptions","organizations_url":"https://api.github.com/users/cerberillo/orgs","repos_url":"https://api.github.com/users/cerberillo/repos","events_url":"https://api.github.com/users/cerberillo/events{/privacy}","received_events_url":"https://api.github.com/users/cerberillo/received_events","type":"User","site_admin":false},"body":"Please, all private should be protected","created_at":"2015-12-01T22:22:18Z","updated_at":"2015-12-01T22:22:18Z","html_url":"https://github.com/pubnative/pubnative-android-library/pull/42#discussion_r46348770","pull_request_url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42","_links":{"self":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/comments/46348770"},"html":{"href":"https://github.com/pubnative/pubnative-android-library/pull/42#discussion_r46348770"},"pull_request":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42"}}},"pull_request":{"url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42","id":52247366,"html_url":"https://github.com/pubnative/pubnative-android-library/pull/42","diff_url":"https://github.com/pubnative/pubnative-android-library/pull/42.diff","patch_url":"https://github.com/pubnative/pubnative-android-library/pull/42.patch","issue_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/42","number":42,"state":"open","locked":false,"title":"Pubnative request","user":{"login":"gauravmehta19","id":15997842,"avatar_url":"https://avatars.githubusercontent.com/u/15997842?v=3","gravatar_id":"","url":"https://api.github.com/users/gauravmehta19","html_url":"https://github.com/gauravmehta19","followers_url":"https://api.github.com/users/gauravmehta19/followers","following_url":"https://api.github.com/users/gauravmehta19/following{/other_user}","gists_url":"https://api.github.com/users/gauravmehta19/gists{/gist_id}","starred_url":"https://api.github.com/users/gauravmehta19/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gauravmehta19/subscriptions","organizations_url":"https://api.github.com/users/gauravmehta19/orgs","repos_url":"https://api.github.com/users/gauravmehta19/repos","events_url":"https://api.github.com/users/gauravmehta19/events{/privacy}","received_events_url":"https://api.github.com/users/gauravmehta19/received_events","type":"User","site_admin":false},"body":"PubNativeRequest Class with its test cases","created_at":"2015-12-01T11:40:02Z","updated_at":"2015-12-01T22:22:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"559d8dfbfc27394731d9fb12c351c79397214590","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42/commits","review_comments_url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42/comments","review_comment_url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/42/comments","statuses_url":"https://api.github.com/repos/pubnative/pubnative-android-library/statuses/2e1a37342c22235ea93a5e579d1b15c7f772aacb","head":{"label":"pubnative:PubnativeRequest","ref":"PubnativeRequest","sha":"2e1a37342c22235ea93a5e579d1b15c7f772aacb","user":{"login":"pubnative","id":7806659,"avatar_url":"https://avatars.githubusercontent.com/u/7806659?v=3","gravatar_id":"","url":"https://api.github.com/users/pubnative","html_url":"https://github.com/pubnative","followers_url":"https://api.github.com/users/pubnative/followers","following_url":"https://api.github.com/users/pubnative/following{/other_user}","gists_url":"https://api.github.com/users/pubnative/gists{/gist_id}","starred_url":"https://api.github.com/users/pubnative/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pubnative/subscriptions","organizations_url":"https://api.github.com/users/pubnative/orgs","repos_url":"https://api.github.com/users/pubnative/repos","events_url":"https://api.github.com/users/pubnative/events{/privacy}","received_events_url":"https://api.github.com/users/pubnative/received_events","type":"Organization","site_admin":false},"repo":{"id":28917789,"name":"pubnative-android-library","full_name":"pubnative/pubnative-android-library","owner":{"login":"pubnative","id":7806659,"avatar_url":"https://avatars.githubusercontent.com/u/7806659?v=3","gravatar_id":"","url":"https://api.github.com/users/pubnative","html_url":"https://github.com/pubnative","followers_url":"https://api.github.com/users/pubnative/followers","following_url":"https://api.github.com/users/pubnative/following{/other_user}","gists_url":"https://api.github.com/users/pubnative/gists{/gist_id}","starred_url":"https://api.github.com/users/pubnative/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pubnative/subscriptions","organizations_url":"https://api.github.com/users/pubnative/orgs","repos_url":"https://api.github.com/users/pubnative/repos","events_url":"https://api.github.com/users/pubnative/events{/privacy}","received_events_url":"https://api.github.com/users/pubnative/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pubnative/pubnative-android-library","description":"","fork":false,"url":"https://api.github.com/repos/pubnative/pubnative-android-library","forks_url":"https://api.github.com/repos/pubnative/pubnative-android-library/forks","keys_url":"https://api.github.com/repos/pubnative/pubnative-android-library/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pubnative/pubnative-android-library/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pubnative/pubnative-android-library/teams","hooks_url":"https://api.github.com/repos/pubnative/pubnative-android-library/hooks","issue_events_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/events{/number}","events_url":"https://api.github.com/repos/pubnative/pubnative-android-library/events","assignees_url":"https://api.github.com/repos/pubnative/pubnative-android-library/assignees{/user}","branches_url":"https://api.github.com/repos/pubnative/pubnative-android-library/branches{/branch}","tags_url":"https://api.github.com/repos/pubnative/pubnative-android-library/tags","blobs_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/refs{/sha}","trees_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pubnative/pubnative-android-library/statuses/{sha}","languages_url":"https://api.github.com/repos/pubnative/pubnative-android-library/languages","stargazers_url":"https://api.github.com/repos/pubnative/pubnative-android-library/stargazers","contributors_url":"https://api.github.com/repos/pubnative/pubnative-android-library/contributors","subscribers_url":"https://api.github.com/repos/pubnative/pubnative-android-library/subscribers","subscription_url":"https://api.github.com/repos/pubnative/pubnative-android-library/subscription","commits_url":"https://api.github.com/repos/pubnative/pubnative-android-library/commits{/sha}","git_commits_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/commits{/sha}","comments_url":"https://api.github.com/repos/pubnative/pubnative-android-library/comments{/number}","issue_comment_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/comments{/number}","contents_url":"https://api.github.com/repos/pubnative/pubnative-android-library/contents/{+path}","compare_url":"https://api.github.com/repos/pubnative/pubnative-android-library/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pubnative/pubnative-android-library/merges","archive_url":"https://api.github.com/repos/pubnative/pubnative-android-library/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pubnative/pubnative-android-library/downloads","issues_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues{/number}","pulls_url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls{/number}","milestones_url":"https://api.github.com/repos/pubnative/pubnative-android-library/milestones{/number}","notifications_url":"https://api.github.com/repos/pubnative/pubnative-android-library/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pubnative/pubnative-android-library/labels{/name}","releases_url":"https://api.github.com/repos/pubnative/pubnative-android-library/releases{/id}","created_at":"2015-01-07T14:26:18Z","updated_at":"2015-10-06T09:01:03Z","pushed_at":"2015-12-01T15:06:16Z","git_url":"git://github.com/pubnative/pubnative-android-library.git","ssh_url":"git@github.com:pubnative/pubnative-android-library.git","clone_url":"https://github.com/pubnative/pubnative-android-library.git","svn_url":"https://github.com/pubnative/pubnative-android-library","homepage":null,"size":2751,"stargazers_count":5,"watchers_count":5,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"open_issues_count":1,"forks":6,"open_issues":1,"watchers":5,"default_branch":"master"}},"base":{"label":"pubnative:development","ref":"development","sha":"df62495961b9ebe8eb6fa57996e835a3fb76b80b","user":{"login":"pubnative","id":7806659,"avatar_url":"https://avatars.githubusercontent.com/u/7806659?v=3","gravatar_id":"","url":"https://api.github.com/users/pubnative","html_url":"https://github.com/pubnative","followers_url":"https://api.github.com/users/pubnative/followers","following_url":"https://api.github.com/users/pubnative/following{/other_user}","gists_url":"https://api.github.com/users/pubnative/gists{/gist_id}","starred_url":"https://api.github.com/users/pubnative/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pubnative/subscriptions","organizations_url":"https://api.github.com/users/pubnative/orgs","repos_url":"https://api.github.com/users/pubnative/repos","events_url":"https://api.github.com/users/pubnative/events{/privacy}","received_events_url":"https://api.github.com/users/pubnative/received_events","type":"Organization","site_admin":false},"repo":{"id":28917789,"name":"pubnative-android-library","full_name":"pubnative/pubnative-android-library","owner":{"login":"pubnative","id":7806659,"avatar_url":"https://avatars.githubusercontent.com/u/7806659?v=3","gravatar_id":"","url":"https://api.github.com/users/pubnative","html_url":"https://github.com/pubnative","followers_url":"https://api.github.com/users/pubnative/followers","following_url":"https://api.github.com/users/pubnative/following{/other_user}","gists_url":"https://api.github.com/users/pubnative/gists{/gist_id}","starred_url":"https://api.github.com/users/pubnative/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pubnative/subscriptions","organizations_url":"https://api.github.com/users/pubnative/orgs","repos_url":"https://api.github.com/users/pubnative/repos","events_url":"https://api.github.com/users/pubnative/events{/privacy}","received_events_url":"https://api.github.com/users/pubnative/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pubnative/pubnative-android-library","description":"","fork":false,"url":"https://api.github.com/repos/pubnative/pubnative-android-library","forks_url":"https://api.github.com/repos/pubnative/pubnative-android-library/forks","keys_url":"https://api.github.com/repos/pubnative/pubnative-android-library/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pubnative/pubnative-android-library/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pubnative/pubnative-android-library/teams","hooks_url":"https://api.github.com/repos/pubnative/pubnative-android-library/hooks","issue_events_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/events{/number}","events_url":"https://api.github.com/repos/pubnative/pubnative-android-library/events","assignees_url":"https://api.github.com/repos/pubnative/pubnative-android-library/assignees{/user}","branches_url":"https://api.github.com/repos/pubnative/pubnative-android-library/branches{/branch}","tags_url":"https://api.github.com/repos/pubnative/pubnative-android-library/tags","blobs_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/refs{/sha}","trees_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pubnative/pubnative-android-library/statuses/{sha}","languages_url":"https://api.github.com/repos/pubnative/pubnative-android-library/languages","stargazers_url":"https://api.github.com/repos/pubnative/pubnative-android-library/stargazers","contributors_url":"https://api.github.com/repos/pubnative/pubnative-android-library/contributors","subscribers_url":"https://api.github.com/repos/pubnative/pubnative-android-library/subscribers","subscription_url":"https://api.github.com/repos/pubnative/pubnative-android-library/subscription","commits_url":"https://api.github.com/repos/pubnative/pubnative-android-library/commits{/sha}","git_commits_url":"https://api.github.com/repos/pubnative/pubnative-android-library/git/commits{/sha}","comments_url":"https://api.github.com/repos/pubnative/pubnative-android-library/comments{/number}","issue_comment_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/comments{/number}","contents_url":"https://api.github.com/repos/pubnative/pubnative-android-library/contents/{+path}","compare_url":"https://api.github.com/repos/pubnative/pubnative-android-library/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pubnative/pubnative-android-library/merges","archive_url":"https://api.github.com/repos/pubnative/pubnative-android-library/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pubnative/pubnative-android-library/downloads","issues_url":"https://api.github.com/repos/pubnative/pubnative-android-library/issues{/number}","pulls_url":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls{/number}","milestones_url":"https://api.github.com/repos/pubnative/pubnative-android-library/milestones{/number}","notifications_url":"https://api.github.com/repos/pubnative/pubnative-android-library/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pubnative/pubnative-android-library/labels{/name}","releases_url":"https://api.github.com/repos/pubnative/pubnative-android-library/releases{/id}","created_at":"2015-01-07T14:26:18Z","updated_at":"2015-10-06T09:01:03Z","pushed_at":"2015-12-01T15:06:16Z","git_url":"git://github.com/pubnative/pubnative-android-library.git","ssh_url":"git@github.com:pubnative/pubnative-android-library.git","clone_url":"https://github.com/pubnative/pubnative-android-library.git","svn_url":"https://github.com/pubnative/pubnative-android-library","homepage":null,"size":2751,"stargazers_count":5,"watchers_count":5,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"open_issues_count":1,"forks":6,"open_issues":1,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42"},"html":{"href":"https://github.com/pubnative/pubnative-android-library/pull/42"},"issue":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/42"},"comments":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/issues/42/comments"},"review_comments":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42/comments"},"review_comment":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/pulls/42/commits"},"statuses":{"href":"https://api.github.com/repos/pubnative/pubnative-android-library/statuses/2e1a37342c22235ea93a5e579d1b15c7f772aacb"}}}}