Extending JS Jobs - Feature List and Description

11 years 3 months ago #1059 by Joseph Johnson
Hello everyone,

I\'m going to start extending JS Jobs this evening (after I receive my Y! API key). Stage 1 of the development will allow Admins to import jobs (by category, keyword, location, or a combo thereof) from YahoO! Hot Jobs.

Stage 2 will consists of JS Jobs Admins being able to push UNIQUE jobs back to Yahoo! Hot Jobs API (creating backlinks, as well as, creating an additional revenue stream for Webmasters).

Stage 3 will may take me a lil\' while (which is why I would like help (eg. Ahmad ;) )). Stage 3 will allow Admins to push / pull resumes from Yahoo! Hot Jobs.

Stage 4 will allow Employers to pull resumes from Yahoo! Hot Jobs and search through them while on your site. When an employer pulls a resume from Y!, it will be parsed and stored in your DB in order to eliminate duplicate requests and minimize server load.

Stage 5 will allow your end-users (Job Seekers) to push their resume out to resume aggregators (if they choose to).

So, to recap, the extended version (which will consist of several core hack to JS Jobs until I\'m finished and submit them to Ahmad for his review) will have a wide variety of features to help Job Site Admins.

1) Request jobs from Yahoo! Hot Jobs Basic / Advanced Search to be stored in local DB (w/ your Y! affiliate code dynamically put into all links for affiliate tracking).

2) Push unique jobs (jobs that YOUR employers have posted) to \"job site\" aggregators (eg. Yahoo!, Simply Hired, Indeed).

3) Push / Pull Resumes to/from \"resume site\" aggregators.

Also, it would be tits if we could make it so that RSS was implemented, as well. This would allow \"job site\" aggregators to easily index job listings / resumes.

Unfortunately, this project could be rather time consuming by myself, so I would truly appreciate any help that other devs / users / testers would be willing to contribute.

If you do not know PHP, etc... Don\'t worry, we\'ll still need testers. ;-)

----
Off Topic
----
While I\'m developing this aspect, if someone else wanted to work on ACL instead... Well, shoots... I\'ll get this ball rolling if you get a proper ACL implemtation working for JS Jobs.

Currently, I am using AEC and User Groups to separate my Employers / Job Seekers, and to prevent them from having to choose \"their role\" after registering (which is a lil\' ridiculous IMHO).

If someone wanted to develop something similar to the AEC / ACL implementation being used in Template Plazza\'s, Job Plazza extension... Well, that would be heavenly (or, Samadhi / Nirvana / Bliss (your choice)).

Send PM or reply to thread if you are interested in any of the above. Please do note which parts you find most interesting, so that I can prioritize our agenda (I need all of the above mentioned functionality and I\'m not too stressed for time, so let me know what features you want done first and I\'ll try to post some ETAs).

Peace, Love and Aloha,
11 years 3 months ago #1060 by Joseph Johnson
Well, after diving into the code (while waiting for the API key) I\'ve determined that.. Yes, this is going to take a while unless I get some contributions from the community... I do not mean monetary, I mean time contributions (which is more valuable, IMHO).

Get at me and let me know what everyone thinks about this proposed features. I\'m looking forward to them, but... Argh, sifting through all of Joomla\'s archaic code is going to drive me crazy. ;-)

Ahmad, can you send me an example module / plugin for JS Jobs so I can see how you\'ve set up your hooks? Instead of modifying the source, I\'m thinking I probably should just create some extensions for JS Jobs.

After reviewing your extended JTables, it seems like it should be fairly easy to map the XML to the DB entries. But, since the way the cities / countries / counties is setup... I\'m not sure how I\'m going to implement this part yet.

Any suggestions?

P.S.
I haven\'t developed anything for Joomla! in well over a year, so I have some catching up to do... Not to mention, my OOP is a lil\' rusty. :(
11 years 3 months ago #1061 by Joseph Johnson
I just got the API key, so I\'m off to my sandbox.

Skype (joseph.r.johnson.1985), PM or e-mail me if you\'re interested in talking about this endeavor.

Peace and Blessings.
11 years 3 months ago - 11 years 3 months ago #1062 by Joseph Johnson
Real Quick, here\'s my code for mapping Indeed\'s XML to your Jobline Database:

/**
*    Insert code into admin.jobline.php
*    as the last switch case statement
*    approximately line 129
*/

    case \"import\":
        import_jobs();
        break;
    case \"request\":
        request_jobs($fldQuery, $fldLocation);
        break;         


/** 
*    Insert into admin.jobline.php
*    Approximately line 820
*/

function import_jobs() {

    $gid = $my->gid;

    ?>
    <form name=\"import\" action=\"index.php\" method=\"get\">
        <input type=\"hidden\" name=\"option\" value=\"com_jobline\" />
        <input type=\"hidden\" name=\"task\" value=\"request\" />
        Job Type:  <input type=\"text\" name=\"q\" value=\"\" size=\"40\" /> <br />
        Location: &nbsp;<input type=\"text\" name=\"l\" value=\"\" size=\"40\" /> <br /><br />
        <input type=\"submit\" value=\"Submit\" name=\"submit\" />
    </form>
    <?php

    return $q && $l;

}

/** Request Jobs from Indeed.com
 * @param text $fldQuery
 * @param text $fldLocation
 * @return db_res
 * Inserts jobs into DB from Indeed.com; optional query and location params.
 */

function request_jobs($fldQuery, $fldLocation) {

	$gid = $my->gid;

	if (isset($fldQuery) || isset($fldLocation)) {
		urlencode($fldQuery);
		urlencode($fldLocation);
	}

	// Get reference to DB Object
	$db =& JFactory::getDBO();

	$publisherId = \"9284102052512106\";
	$filter = 1;
	$limit = \"30\";

	$baseUrl = \"http://api.indeed.com/ads/apisearch?publisher=\" . $publisherId . \"&q=\" . $fldQuery;
	$baseUrl .= \"&l=\" . $fldLocation . \"&filter=\" . $filter . \"&limit=\" . $limit;

	$results = simplexml_load_file($baseUrl) or die(\"The feed did not load!\");

	if(isset($results)) {

		$i = 0;

		foreach($results->xpath(\'//result\') as $result)	{			/** 		*/

			$i++;

			$title = preg_replace(\"/[^a-zA-Z0-9 .?!$()\\\'\\\"]/\", \"\", $result->jobtitle);
			$company = preg_replace(\"/[^a-zA-Z0-9 .?!$()\\\'\\\"]/\", \"\", $result->company);
			$city = preg_replace(\"/[^a-zA-Z0-9 .?!$()\\\'\\\"]/\", \"\", $result->city);
			$usstate = preg_replace(\"/[^a-zA-Z0-9 .?!$()\\\'\\\"]/\", \"\", $result->state);
			$country = preg_replace(\"/[^a-zA-Z0-9 .?!$()\\\'\\\"]/\", \"\", $result->country);
			$description = preg_replace(\"/[^a-zA-Z0-9 .?!$()\\\'\\\"]/\", \"\", $result->snippet);

			$title = $db->getEscaped($title);
			$company = $db->getEscaped($company);
			$city = $db->getEscaped($city);
			$usstate = $db->getEscaped($usstate);
			$country = $db->getEscaped($country);
			$info = $db->getEscaped($result->url);
            $applyinfo = \"<a href=\'\" . $info . \"\' target=\'_blank\'>{$info}</a>\";
			$apply = $db->getEscaped($applyinfo);
			$description = $db->getEscaped($description);

			$time = time();
			$created = gmdate(\'Y:m:d H:m:i\', $time);

			$query = \"INSERT INTO #__jl_jobposting (title, company, city, usstate, country, applyinfo, description, created, access, state) \" .

					\"VALUES (\'$title\' , \'$company\' , \'$city\' , \'$usstate\' , \'$country\' , \'$apply\' , \'$description\' , \'$created\', \'0\', \'1\' );\";

			$db->setQuery($query);
			$db->query();
		}
        
		echo \"<br><br><h1>{$i} Records were imported from Indeed!</h1>\";
        echo \"<a href=\'index.php?option=com_jobline&task=list\'>Return to Job Postings</a>\";

	} else {
        echo \"Error: \" . mysql_error();
    }
}


This code is for testing purposes and has not been tested on a production server; I make no guarantees or warranties if you attempt to utilize this code in Jobline (as I wrote this code over a year ago for the 1.5 Legacy Version (not the new Joomla 1.5 compatible version).

Nonetheless, this illustrative example goes to show how easy it was to map the Indeed XML feed to the Jobline DB fields. Unfortunately, it doesn\'t look nearly as easy with JS Jobs db schema.

Ahmad, or other devs, if you could provide some insight and/or assistance, I would truly appreciate it. Thanks in advance.
11 years 2 months ago #1105 by Glenn Whitten
So Monster is acquiring Yahoo!HotJobs?
-- http://www.recruitingsitereview.com/

Makes me think that the time & effort spent on a HotJobs interface may have a very short payback life.:unsure:

Pushing jobs out thru RSS or to Indeed.com/SimplyHired.com might be a more flexible route...at least until the Monster/HotJobs dust settles.

Just my thoughts. I appreciate all you guys do to make JS Jobs great!

Regards, --Glenn
Time to create page: 0.166 seconds

Please publish modules in offcanvas position.