{"id":1157,"date":"2016-11-30T04:14:35","date_gmt":"2016-11-30T04:14:35","guid":{"rendered":"http:\/\/myprojects.advchaweb.com\/?p=1157"},"modified":"2016-11-30T04:45:32","modified_gmt":"2016-11-30T04:45:32","slug":"elance-api-on-wordpress-without-wp-plugin","status":"publish","type":"post","link":"https:\/\/myprojects.advchaweb.com\/index.php\/2016\/11\/30\/elance-api-on-wordpress-without-wp-plugin\/","title":{"rendered":"Elance API on WordPress Without WP Plugin"},"content":{"rendered":"<p>Elance has gone now and merged with Odesk to establish a new company Upwork. Once I successfully used Elance API on my wordpress website without using wordpress plugin. I know it&#8217;s a bad practice but it&#8217;s work anyway. Here is how to do it:<\/p>\n<ol>\n<li>Make sure you already registered on elance (https:\/\/elance.com) and have any elance key. If not go to https:\/\/developers.elance.com and get the keys (API Key, API secret, redirect URL, etc). Here is the keys:<br \/>\n<span class=\"rcp-restricted-content-message\">SORRY, ONLY ADMIN CAN SHOW THIS!<\/span><\/li>\n<li>I created a new wordpress template page with name &#8216;My Elance Jobs&#8217; in a new file &#8216;my_elance_page.php&#8217; in the active wordpress theme (currently the active theme is Sorbet). Based on some PHP example to use Elance API, Here is the complete content:\n<pre class=\"lang:default decode:true \">&lt;?php\r\n\/*\r\nTemplate Name: My Elance Jobs\r\n*\/\r\n\/*\r\n * The purpose of this page is to integrate my wordpress website with my elance credential through API provided by elance\r\n * so i can display the elance search result on my wp site. I can also filter the search result based on the keywords I like \r\n * elance return json data if the API call is success then loop the json to display the result\r\n *\/\r\nsession_start();\r\nrequire_once('elance-auth-lib.php');\r\nerror_reporting(E_ALL);\r\n$api_key=\"my_api_key\";\r\n$consumer_secret_code=\"my_secret_code\";\r\n$keywords=\"php mysql\";\r\n$body=\"Nothing\";\r\n\r\nif (!isset($_GET[\"code\"]) &amp;&amp; empty($_SESSION['access_token'])) {\r\n\t$elance_auth = new ElanceAuthentication();\r\n\t$url = $elance_auth-&gt;RequestAccessCode($api_key, \"http:\/\/www.advchaweb.com\/elance\");\r\n\r\n\theader(\"Location:\".$url);\r\n}else{\t\t\t\t \r\n\t\/\/use elance library\r\n\t$elance_auth = new ElanceAuthentication();\r\n\tif(empty($_SESSION['access_token'])){\r\n\t\t\/\/get the access token by feed api key and secret code\r\n\t\t$code = $_GET[\"code\"];\r\n\t\t$json = $elance_auth-&gt;GetAccessToken($api_key, $consumer_secret_code, $code);\r\n\t\t \r\n\t\t\/\/Output code\r\n\t\t$access_token=$json-&gt;data-&gt;access_token;\r\n\t\t$_SESSION['access_token']=$access_token;\r\n\t}else{\r\n\t\t$access_token=$_SESSION['access_token'];\r\n\t}\r\n\t\/\/ What page of data are we displaying? Defaults to 1.\r\n\t$current_page = 1;\r\n\tif (isset($_GET[\"currentPage\"])) { \r\n\t\tis_numeric($_GET[\"currentPage\"]) or die (\"ERROR: currentPage parameter MUST be an integer!\");\r\n\t\tintval($_GET[\"currentPage\"]) &gt; 0 or die (\"ERROR: currentPage parameter MUST be greater than 0!\");\r\n\t\t$current_page = $_GET[\"currentPage\"];\r\n\t}\r\n\t \r\n\t\/\/elance api url to get the jobs application\r\n\t$getJobUrl = \"https:\/\/api.elance.com\/api2\/jobs\";\r\n\t$params=array(\r\n\t\t\"access_token\"=&gt;$access_token,\r\n\t\t\"keywords\"=&gt;$keywords,\r\n\t\t\"sortCol\"=&gt;\"numProposals\",\r\n\t\t\"sortOrder\"=&gt;\"asc\",\r\n\t\t\"page\"=&gt;$current_page\r\n\t);\r\n\t$json_response = $elance_auth-&gt;ExecRequest($getJobUrl, $access_token, $params);\r\n\tif(isset($json_response-&gt;errors)){\r\n\t\t$error = $json_response-&gt;errors;\r\n\t\t$err_code = \"\";\r\n\t\t$err_desc = \"\";\r\n\t\t\r\n\t\tforeach($error as $key =&gt; $value){\r\n\t\t\t$err_code=$value-&gt;code;\r\n\t\t\t$err_desc=$value-&gt;description;\r\n\t\t}\r\n\t\tif($err_code==\"invalid_token_expired\"){\r\n\t\t\t$url = $elance_auth-&gt;RequestAccessCode($api_key, \"http:\/\/www.advchaweb.com\/elance\");\r\n\r\n\t\t\theader(\"Location:\".$url);\r\n\t\t}\r\n\t}\r\n\tif ($json_response == null) {\r\n\t\tdie(\"Retrieved Elance API call, but the response was not valid JSON code.\");\r\n\t}\r\n\t\/\/ Generate a success or error response depending on the value of rcode.\r\n\tif (isset($json_response-&gt;rcode)) { \r\n\t\t$body = \"Call did not complete. JSON error returned.\";\r\n\t} else {\r\n\t\tif ($json_response-&gt;data-&gt;numResults == 0) {\r\n\t\t\t$body = \"No records returned.\";\r\n\t\t} else {\r\n\t\t\t$results_per_page = 25;\r\n\t\t\t$record_num=1+($current_page-1)*$results_per_page;\r\n\t\t\t\/\/ Display paging information. \r\n\t\t\t$max_result_num = $json_response-&gt;data-&gt;page * $results_per_page;\r\n\t\t\t$first_rec_num = $max_result_num - ($results_per_page - 1);\r\n\t\t\t$body = \"&lt;p&gt;Keywords : \".$keywords.\"&lt;\/p&gt;&lt;div style=\\\"width:100%;position:relative;\\\"&gt;\\n\";\r\n\t\t\t$body .= \"&lt;span style=\\\"width:37%;position:absolute;left:0;\\\"&gt;Displaying records \" . $first_rec_num . \" - \" . (($json_response-&gt;data-&gt;page - 1)* $results_per_page + $json_response-&gt;data-&gt;numResults) . \" out of \" . $json_response-&gt;data-&gt;totalResults . \" total results&lt;\/span&gt;\\n\";\r\n\t \r\n\t\t\t\/\/ Display paging controls. \r\n\t\t\t$body .= \"&lt;span style=\\\"width:37%;position:absolute; right:0; text-align:right;\\\"&gt;\";\r\n\t\t\t$sep_text = \"\";\r\n\t\t\tif ($json_response-&gt;data-&gt;page &gt; 1) {\r\n\t\t\t\t$body .= \"&lt;a href=\\\"?currentPage=\" . ($json_response-&gt;data-&gt;page - 1) . \"\\\"&gt;&lt; Previous&lt;\/a&gt;&amp;nbsp;\";\r\n\t\t\t\t$sep_text = \"|&amp;nbsp;\";\r\n\t\t\t}\r\n\t\t\tif ($json_response-&gt;data-&gt;page != $json_response-&gt;data-&gt;totalPages) {\r\n\t\t\t\t$body .= $sep_text;\r\n\t\t\t\t$body .= \"&lt;a href=\\\"?currentPage=\" . ($json_response-&gt;data-&gt;page + 1) . \"\\\"&gt;Next &gt;&lt;\/a&gt;&amp;nbsp;\";\r\n\t\t\t}\r\n\t\t\t$body .= \"&lt;\/span&gt;\\n\";\r\n\t \r\n\t\t\t$body .= \"&lt;\/div&gt;\\n\";\r\n\t \r\n\t\t\t$body .= \"&lt;div style=\\\"padding-top:30px;\\\"&gt;&lt;table style=\\\"width:100%;table-layout:fixed;\\\"&gt;\\n\"; \r\n\t\t\t$body .= \"&lt;tr style=\\\"background-color:#cccccc;font-weight:bold;\\\"&gt;\r\n\t\t\t\t&lt;th style=\\\"width:5%;\\\"&gt;Job ID&lt;\/th&gt;\r\n\t\t\t\t&lt;th style=\\\"width:18%;\\\"&gt;Job ID&lt;br\/&gt;Category&lt;\/th&gt;\r\n\t\t\t\t&lt;th style=\\\"width:27%;\\\"&gt;Job Title&lt;\/th&gt;\r\n\t\t\t\t&lt;th style=\\\"width:15%;\\\"&gt;Budget&lt;br\/&gt;Date&lt;\/th&gt;\r\n\t\t\t\t&lt;th style=\\\"width:30%;\\\"&gt;Description&lt;\/th&gt;\r\n\t\t\t\t&lt;th style=\\\"width:5%;\\\"&gt;# of Bids&lt;\/th&gt;\r\n\t\t\t\t&lt;\/tr&gt;\";\r\n\t\t\t\/\/displaying result\r\n\t\t\tforeach ($json_response-&gt;data-&gt;pageResults as $job_obj) {\r\n\t\t\t\t$body .= \"&lt;tr class=\\\"basicRow\\\"&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;td&gt;\" . $record_num . \"&lt;\/td&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;td&gt;\" . $job_obj-&gt;jobId.\"&lt;br\/&gt;\".$job_obj-&gt;category . \"&lt;\/td&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;td&gt;&lt;a href=\\\"\" . $job_obj-&gt;jobURL . \"\\\" target=\\\"_blank\\\"&gt;\" . $job_obj-&gt;name . \"&lt;\/a&gt;&lt;br\/&gt;\".subkeywordsMatch(strtolower($job_obj-&gt;description)).\"&lt;\/td&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;td&gt;\" . $job_obj-&gt;budget . \"&lt;br\/&gt;\".date('d\/m\/Y', $job_obj-&gt;startDate).\"&lt;br\/&gt;\".date('d\/m\/Y', $job_obj-&gt;endDate).\"&lt;\/td&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;td style=\\\"word-wrap:break-word;\\\"&gt;\" . word_trim($job_obj-&gt;description, 50, TRUE) . \"...&lt;\/td&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;td style=\\\"text-align:center;\\\"&gt;\" . $job_obj-&gt;numProposals . \"&lt;td&gt;\\n\";\r\n\t\t\t\t$body .= \"&lt;\/tr&gt;\\n\";\r\n\t\t\t\t$record_num++;\r\n\t\t\t}\r\n\t \r\n\t\t\t$body .= \"&lt;\/table&gt;&lt;\/div&gt;\";\r\n\t\t}\r\n\t}\t\r\n}\r\n\r\nget_header(); ?&gt;\r\n\t&lt;div id=\"job_result\" class=\"job_result\" style=\"margin-top: -50px;\"&gt;\r\n\r\n\t\t&lt;?php \r\n\t\t\techo $body;\r\n\r\n\t\t?&gt;\r\n\r\n\t&lt;\/div&gt;&lt;!-- #primary --&gt;\r\n&lt;?php \/\/get_sidebar(); ?&gt;\r\n&lt;?php get_footer(); ?&gt;\r\n&lt;?php \r\n\/\/ word_trim courtesy of Jeff Robbins @ Lullabot( http:\/\/www.lullabot.com\/articles\/trim-a-string-to-a-given-word-count)\r\nfunction word_trim($string, $count, $ellipsis = FALSE){\r\n  $words = explode(' ', $string);\r\n  if (count($words) &gt; $count){\r\n\tarray_splice($words, $count);\r\n\t$string = implode(' ', $words);\r\n\tif (is_string($ellipsis)){\r\n\t  $string .= $ellipsis;\r\n\t}\r\n\telseif ($ellipsis){\r\n\t  $string .= '&amp;hellip;';\r\n\t}\r\n  }\r\n  return $string;\r\n}\r\n\r\nfunction subkeywordsMatch($string){\r\n\t$subkeywords=array(\"api\",\"instagram\",\"plugin\",\"osclass\",\"magento\",\"symfony\",\"jquery\",\"wordpress\",\"joomla\",\"crm\",\"mailchimp\");\r\n\t$counter=0;\r\n\t$match=array();\r\n\tforeach($subkeywords as $sk){\r\n\t\tif(strpos($string,$sk)!==false){\r\n\t\t\t$counter++;\r\n\t\t\t$match[]=$sk;\r\n\t\t}\r\n\t}\r\n\tif($counter)\r\n\t\treturn \"Match \".$counter.\" keywords (\".implode(\",\",$match).\")\";\r\n\telse\r\n\t\treturn \"\";\r\n}\r\n?&gt;<\/pre>\n<p>Just read the code. Try to comprehend it by yourself :). I also need to add a new file &#8216;elance-auth-lib.php&#8217; for the elance API PHP wrapper in the same directory. The class &#8216;ElanceAuthentication&#8217; in the file would authenticate the access to the API.<\/p>\n<pre class=\"lang:default decode:true \">&lt;?php\r\n \r\nclass ElanceAuthentication {\r\n    public $CurlHeaders;\r\n    public $ResponseCode;\r\n \r\n    private $_AuthorizeUrl = \"https:\/\/api.elance.com\/api2\/oauth\/authorize\";\r\n    private $_AccessTokenUrl = \"https:\/\/api.elance.com\/api2\/oauth\/token\";\r\n \r\n    public function __construct() {\r\n        $this-&gt;CurlHeaders = array();\r\n        $this-&gt;ResponseCode = 0;\r\n    }\r\n \r\n    public function RequestAccessCode ($client_id, $redirect_url) {\r\n        return($this-&gt;_AuthorizeUrl . \"?client_id=\" . $client_id . \"&amp;response_type=code&amp;redirect_uri=\" . $redirect_url);\r\n    }\r\n \r\n    \/\/ Convert an authorization code from an Elance callback into an access token.\r\n    public function GetAccessToken($client_id, $client_secret, $auth_code) {        \r\n        \/\/ Init cUrl.\r\n        $r = $this-&gt;InitCurl($this-&gt;_AccessTokenUrl);\r\n \r\n        \/\/ Add client ID and client secret to the headers.\r\n        curl_setopt($r, CURLOPT_HTTPHEADER, array (\r\n            \"Authorization: Basic \" . base64_encode($client_id . \":\" . $client_secret),\r\n        ));        \r\n \r\n        \/\/ Assemble POST parameters for the request.\r\n        $post_fields = \"code=\" . urlencode($auth_code) . \"&amp;grant_type=authorization_code\";\r\n \r\n        \/\/ Obtain and return the access token from the response.\r\n        curl_setopt($r, CURLOPT_POST, true);\r\n        curl_setopt($r, CURLOPT_POSTFIELDS, $post_fields);\r\n \r\n        $response = curl_exec($r);\r\n        if ($response == false) {\r\n            die(\"curl_exec() failed. Error: \" . curl_error($r));\r\n        }\r\n \r\n        \/\/Parse JSON return object.\r\n        return json_decode($response);\r\n    }\r\n \r\n    private function InitCurl($url) {\r\n        $r = null;\r\n \r\n        if (($r = @curl_init($url)) == false) {\r\n            header(\"HTTP\/1.1 500\", true, 500);\r\n            die(\"Cannot initialize cUrl session. Is cUrl enabled for your PHP installation?\");\r\n        }\r\n \r\n        curl_setopt($r, CURLOPT_RETURNTRANSFER, 1);\r\n \r\n        \/\/ Decode compressed responses.\r\n        curl_setopt($r, CURLOPT_ENCODING, 1);\r\n \r\n        \/\/ NOTE: If testing locally, add the following lines to use a dummy certificate, and to prevent cUrl from attempting to verify\r\n        \/\/ the certificate's authenticity. See http:\/\/richardwarrender.com\/2007\/05\/the-secret-to-curl-in-php-on-windows\/ for more\r\n        \/\/ details on this workaround. If your server has a valid SSL certificate installed, comment out these lines.\r\n        curl_setopt($r, CURLOPT_SSL_VERIFYPEER, false);\r\n        \/\/curl_setopt($r, CURLOPT_CAINFO, \"C:\\wamp\\bin\\apache\\Apache2.2.21\\cacert.crt\");\r\n \r\n        \/\/ NOTE: For Fiddler2 debugging.\r\n        \/\/curl_setopt($r, CURLOPT_PROXY, '127.0.0.1:8888');\r\n \r\n        return($r);\r\n    }\r\n \r\n    \/\/ A generic function that executes an Elance API request. \r\n    public function ExecRequest($url, $access_token, $get_params) {\r\n        \/\/ Create request string.\r\n        \/\/$full_url = http_build_query($url, $get_params);\r\n        $full_url = $url.\"?\".http_build_query($get_params);\r\n \r\n        \/\/$r = $this-&gt;InitCurl($url);\r\n        $r = $this-&gt;InitCurl($full_url);\r\n \r\n        \/*curl_setopt($r, CURLOPT_HTTPHEADER, array (\r\n            \"Authorization: Basic \" . base64_encode($access_token)\r\n        ));\r\n \r\n        $response = curl_exec($r);\r\n        if ($response == false) {\r\n            die(\"curl_exec() failed. Error: \" . curl_error($r));\r\n        }*\/\r\n        $curl_options = array (\r\n\t\t\tCURLOPT_FRESH_CONNECT =&gt; 1,\r\n\t\t\tCURLOPT_RETURNTRANSFER =&gt; 1\r\n\t\t\t);\r\n\t\tcurl_setopt_array($r, $curl_options);\r\n\t\t \r\n\t\t\/\/ Convert response to JSON.\r\n\t\t$json_txt = curl_exec($r);\r\n\t\tif ($json_txt == false) {\r\n\t\t\tdie(\"Cannot retrieve Elance API URL using cUrl. URL: \" . $url);\r\n\t\t}\r\n\t\tcurl_close($r); \r\n\t\t \r\n\t\t$json_response = json_decode($json_txt);\r\n \r\n        \/\/Parse JSON return object.\r\n        \/\/return json_decode($response);        \r\n        return $json_response;        \r\n        \/\/return $full_url;        \r\n    }\r\n}\r\n \r\n?&gt;<\/pre>\n<p>&nbsp;<\/li>\n<li>On the wordpress admin, create a new page (not post) with title &#8216;Elance&#8217; then use template &#8216;My Elance Jobs&#8217; then Save! It would create a new url: http:\/\/www.advchaweb.com\/elance\/. The url is must be same with our redirect url above!<a href=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-api.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-1163\" src=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-api-1024x478.png\" alt=\"elance-api\" width=\"840\" height=\"392\" srcset=\"https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-api-1024x478.png 1024w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-api-300x140.png 300w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-api-768x359.png 768w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-api.png 1156w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><\/li>\n<li>OK. Now we can use the API from our wordpress page.<a href=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/wp-elance.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1164\" src=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/wp-elance.png\" alt=\"wp-elance\" width=\"818\" height=\"169\" srcset=\"https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/wp-elance.png 818w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/wp-elance-300x62.png 300w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/wp-elance-768x159.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a>Just click the link &#8216;Elance&#8217; or <a href=\"http:\/\/www.advchaweb.com\/elance\" target=\"_blank\">http:\/\/www.advchaweb.com\/elance<\/a><\/li>\n<li>First, It&#8217;d redirect us to elance page and please log in!<a href=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-login.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1165\" src=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-login.png\" alt=\"elance-login\" width=\"968\" height=\"537\" srcset=\"https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-login.png 968w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-login-300x166.png 300w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-login-768x426.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><span class=\"rcp-restricted-content-message\">SORRY, ONLY ADMIN CAN SHOW THIS!<\/span><\/li>\n<li>After successful login, I supposed to get the authorization page but because it is already closed, I got this page instead \ud83d\ude41<a href=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-closed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1166\" src=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-closed.png\" alt=\"elance-closed\" width=\"1014\" height=\"421\" srcset=\"https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-closed.png 1014w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-closed-300x125.png 300w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-closed-768x319.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a>SOMEHOW when I click the &#8216;Continue to Elance&#8217; button, I still get the authorization page!!!<br \/>\n<span class=\"rcp-restricted-content-message\">SORRY, ONLY ADMIN CAN SHOW THIS!<\/span><a href=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-auth.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1167\" src=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-auth.png\" alt=\"elance-auth\" width=\"961\" height=\"415\" srcset=\"https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-auth.png 961w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-auth-300x130.png 300w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-auth-768x332.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a>OK. Click &#8216;Allow&#8217; button<\/li>\n<li>It would be redirected back to my wordpress page. Because there is no job anymore on elance, I got no data!<a href=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-redirect.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1168\" src=\"http:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-redirect.png\" alt=\"elance-redirect\" width=\"631\" height=\"164\" srcset=\"https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-redirect.png 631w, https:\/\/myprojects.advchaweb.com\/wp-content\/uploads\/2016\/11\/elance-redirect-300x78.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><span class=\"rcp-restricted-content-message\">SORRY, ONLY ADMIN CAN SHOW THIS!<\/span>\n<p>&nbsp;<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Elance has gone now and merged with Odesk to establish a new company Upwork. Once I successfully used Elance API on my wordpress website without using wordpress plugin. I know it&#8217;s a bad practice but it&#8217;s work anyway. Here is how to do it: Make sure you already registered on elance (https:\/\/elance.com) and have any &hellip; <a href=\"https:\/\/myprojects.advchaweb.com\/index.php\/2016\/11\/30\/elance-api-on-wordpress-without-wp-plugin\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Elance API on WordPress Without WP Plugin&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,13,44],"tags":[],"class_list":["post-1157","post","type-post","status-publish","format-standard","hentry","category-api-2","category-tutorial","category-wordpress-tutorial"],"_links":{"self":[{"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/posts\/1157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/comments?post=1157"}],"version-history":[{"count":4,"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/posts\/1157\/revisions"}],"predecessor-version":[{"id":1169,"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/posts\/1157\/revisions\/1169"}],"wp:attachment":[{"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/media?parent=1157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/categories?post=1157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/myprojects.advchaweb.com\/index.php\/wp-json\/wp\/v2\/tags?post=1157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}