/*package com.skripko.freelance.platform;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.SelenideElement;
import com.skripko.freelance.Job;
import org.openqa.selenium.Keys;
import java.util.LinkedHashSet;
import java.util.Set;
import static com.codeborne.selenide.Selenide.$$;
public class PeoplePerHour implements FlProcessor {
public static final FlProcessor instance = new PeoplePerHour();
public static final String CONST_JOB_URL_PART = "https://www.upwork.com/jobs/";
private static Set<SearchQuery> searchQueries = new LinkedHashSet<>();
static {
searchQueries.add(new SearchQuery("data science", CONST_JOB_URL_PART +
"#filter/?q=skills%3A(data-science)%20OR%20skills%3A(data-analysis)%20OR%20skills%3A(big-data)" +
"%20OR%20skills%3A(machine-learning)%20OR%20skills%3A(r)&sortBy=s_ctime+desc"));//&spellcheck=1&highlight=1&sortBy=s_ctime+desc
searchQueries.add(new SearchQuery("mining", CONST_JOB_URL_PART + "?q=skills%3A(data-mining)" +
"%20OR%20skills%3A(parse)%20OR%20skills%3A(crawlers)%20OR%20skills%3A(web-crawler)" +
"%20OR%20skills%3A(data-scraping)%20OR%20skills%3A(web-scraping)&sortBy=s_ctime+desc"));
searchQueries.add(new SearchQuery("selenium", CONST_JOB_URL_PART + "?q=skills%3A(selenium)" +
"%20OR%20skills%3A(selenium-webdriver)%20OR%20skills%3A(scrapy-framework)&sortBy=s_ctime+desc"));
searchQueries.add(new SearchQuery("hadoop", CONST_JOB_URL_PART + "?q=skills%3A(hadoop)%20OR%20skills%3A(r-hadoop)%20OR%20skills%3A(apache-spark)&sortBy=s_ctime+desc"));
searchQueries.add(new SearchQuery("shiny", CONST_JOB_URL_PART + "?q=shiny&cn1%5B%5D=Data%20Science%20%26%20Analytics&sortBy=s_ctime+desc"));
searchQueries.add(new SearchQuery("documentum", CONST_JOB_URL_PART + "?or_terms=documentum+dql&cn1%5B%5D=IT+%26+Networking", "?or_terms=documentum+dql&cn1%5B%5D=Web%2C+Mobile+%26+Software+Dev&sortBy=s_ctime+desc"));
}
private PeoplePerHour() {
}
@Override
public Set<SearchQuery> getSearchQueries() {
return searchQueries;
}
@Override
public boolean clickNextPage() {
SelenideElement jobListFooter = getJobListFooter();
if (!jobListFooter.$("nav").exists()) {
return false;
}
ElementsCollection nextButtonCol = jobListFooter.$$(JobListSelectors.PAGER_CLASS).filter(Condition.hasText("Next"));
if (nextButtonCol == null || JobListSelectors.NEXT_DISABLED_CLASS.equals(nextButtonCol.get(0).attr("class"))) {
return false;
}
nextButtonCol.get(0).click();
return true;
}
private SelenideElement getJobListFooter() {
return $(JobListSelectors.JOB_LIST_ROOT).$("footer");
}
@Override
public ElementsCollection getJobElements() {
return $(JobListSelectors.JOB_LIST_ROOT).$$(JobListSelectors.JOB_CLASS);
}
@Override
public Job parseElement(SelenideElement el) {
String idUrl = el.$(JobSelectors.JOB_TITLE_CLASS).attr("href").replace(CONST_JOB_URL_PART, "");
String timePostedStr = el.$(JobSelectors.JOBS_TIME_POSTED_CLASS).
shouldHave(Condition.matchText(".*" + JobSelectors.JOB_DURATION_PATTERN + ".*")).getText();
long lifeDayDuration = extractJobDuration(timePostedStr);
el.$(JobSelectors.JOB_LINK).sendKeys(Keys.CONTROL + "t");
el.sendKeys(Keys.CONTROL + "\t");
String applicantsStr = $$("span").find(Condition.attribute("ng-bind", "data.applicantsCount")).getText();
el.sendKeys(Keys.CONTROL + "\t");
int proposalCount = Integer.parseInt(applicantsStr);
return new Job(idUrl, lifeDayDuration, proposalCount);
}
private long extractJobDuration(String strDate) {
if (strDate == null || strDate.isEmpty()) {
throw new IllegalArgumentException();
}
if (strDate.contains("hour")) {
return 0;
} else if (strDate.contains("day")) {
return Long.parseLong(strDate.split(" ")[1]);
} else if (strDate.contains("month")) {
return 30 * Long.parseLong(strDate.split(" ")[1]);
}
return 365;
}
static class JobListSelectors {
public static final String JOB_LIST_ROOT = ".oListLite.jsSearchResults";
public static final String JOB_CLASS = ".oMed.oJobTile.jsSimilarTile";
public static final String PAGER_CLASS = ".oPager";
public static final String NEXT_DISABLED_CLASS = "oPager.isDisabled";
}
static class JobSelectors {
public static final String JOB_TITLE_CLASS = ".oVisitedLink";
public static final String JOBS_TIME_POSTED_CLASS = ".jsPosted";
public static final String JOB_DURATION_PATTERN = "Posted";
public static final String JOB_LINK = ".oVisitedLink";
}
}
*/