name: FreeonesCommunity

performerByName:
  action: scrapeXPath
  queryURL: https://www.freeones.com/babes?q={}&v=teasers&s=relevance&l=96&m%5BcanPreviewFeatures%5D=0
  scraper: performerSearch

performerByURL:
  - action: scrapeXPath
    url:
      - freeones.xxx
      - freeones.com
    scraper: performerScraper

sceneByName:
  action: scrapeXPath
  queryURL: https://www.freeones.com/vod?q={}
  scraper: sceneSearch

sceneByQueryFragment:
  action: scrapeXPath
  queryURL: "{url}"
  scraper: sceneScraper

sceneByURL:
  - action: scrapeXPath
    url:
      - www.freeones.com
    scraper: sceneScraper

movieByURL:
  - action: scrapeXPath
    url:
      - www.freeones.com
    scraper: movieScraper

xPathScrapers:
  performerSearch:
    performer:
      Name: //div[@id="search-result"]//p[@data-test="subject-name"]/text()
      URL:
        selector: //div[@id="search-result"]//div[@data-test="teaser-subject"]/a/@href
        postProcess:
          - replace:
              - regex: ^
                with: https://www.freeones.com
              - regex: /feed$
                with: /bio
  sceneSearch:
    common:
      $movieTitle: //div[@data-test="teaser-vod"]//img
    scene:
      Title: $movieTitle/@alt
      Image: $movieTitle/@src
      URL:
        selector: //div[@data-test="teaser-vod"]/a/@href
        postProcess:
          - replace:
              - regex: ^
                with: "https://www.freeones.com"

  sceneScraper:
    common:
      $commonRoot: //*[@id="description"]
      $performerName: //a[@data-test="link_Cast"]
    scene:
      Title: //h1
      URL: //link[@rel="alternate"][1]/@href
      Details: $commonRoot//div[contains(concat(' ',normalize-space(@class),' '),' pb-2 ')]
      Studio:
        Name: $commonRoot//span[@data-test="link_span_Studio"]
      Director: $commonRoot//span[@data-test="link_span_Director"]
      Date:
        selector: //div[contains(concat(' ',normalize-space(@class),' '),' mid-content-pr-past-date ')]
        postProcess:
          - replace:
            - regex: .+?(\w+\s\d{1,2},\s\d{4}).+
              with: $1
          - parseDate: January 2, 2006
      Movies:
        Name: //h1
        URL: //link[@rel="alternate"][1]/@href
      Performers:
        Name: $performerName/span
      Tags:
        Name: //li[@class="list-inline-item"]/a
#        URL:
#          selector: $performerName/@href
#          postProcess:
#            - replace:
#              - regex: ^
#                with: "https://www.freeones.com"

  movieScraper:
    common:
      $commonRoot: //*[@id="description"]
      $performerName: //a[@data-test="link_Cast"]
    movie:
      Name: //h1
      Synopsis: $commonRoot//div[contains(concat(' ',normalize-space(@class),' '),' pb-2 ')]
      Duration: $commonRoot//span[@data-test="link_span_Duration"]
      Studio:
        Name: $commonRoot//span[@data-test="link_span_Studio"]
      Director: $commonRoot//span[@data-test="link_span_Director"]
      Date:
        selector: //div[contains(concat(' ',normalize-space(@class),' '),' mid-content-pr-past-date ')]
        postProcess:
          - replace:
            - regex: .+?(\w+\s\d{1,2},\s\d{4}).+
              with: $1
          - parseDate: January 2, 2006
      FrontImage: //*[@id="fxgp-gallery"]/a[1]/@href
      BackImage: //*[@id="fxgp-gallery"]/a[2]/@href

  performerScraper:
    performer:
      Name:
        selector: //h1
        postProcess:
          - replace:
              - regex: (.+)\sidentifies.+
                with: $1
      URL: //link[@rel="alternate" and @hreflang="x-default"]/@href
      Twitter: //form//a[contains(@href,'twitter.com/')]/@href
      Instagram: //form//a[contains(@href,'instagram.com/')]/@href
      Birthdate:
        selector: //span[@data-test="link_span_dateOfBirth"]/text()
        postProcess:
          - parseDate: January 2, 2006
      Ethnicity:
        selector: //span[@data-test="link_span_ethnicity"]
        postProcess:
          - map:
              Asian: Asian
              Caucasian: White
              Black: Black
              Latin: Hispanic
      Country:
        selector: //a[@data-test="link_placeOfBirth"][contains(@href, 'country')]/span/text()
        postProcess:
          - map:
              United States: "USA"
      EyeColor: //span[text()='Eye Color:']/following-sibling::span/a/span/text()
      Height:
        selector: //span[text()='Height:']/following-sibling::span/a
        postProcess:
          - replace:
            - regex: \scm
              with: ""
          - map:
              Unknown: ""
      Measurements:
        selector: //span[(@data-test='link_span_bra') or (@data-test='link_span_waist') or (@data-test='link_span_hip')]
        concat: " - "
        postProcess:
          - replace:
              - regex: \sIn
                with: ""
          - map:
              Unknown: ""
      FakeTits:
        selector: //span[text()='Boobs:']/following-sibling::span/a
        postProcess:
          - map:
              Unknown: ""
              Fake: "Yes"
              Natural: "No"
      CareerLength:
        selector: //div[contains(@class,'timeline-horizontal')]//p[@class='m-0']
        concat: "-"
      Aliases:
        selector: //span[@data-test='link_span_aliases']/text()
        concat: ", "
      Tattoos:
        selector: //span[text()='Tattoo locations:']/following-sibling::span
        postProcess:
          - map:
              Unknown: ""
      Piercings:
        selector: //span[text()='Piercing locations:']/following-sibling::span
        postProcess:
          - map:
              Unknown: ""
      Image:
        selector: //div[contains(@class,'image-container')]//a/img/@src
      Gender:
        fixed: "Female"
      #Details: //div[@data-test="biography"]
      DeathDate:
        selector: //div[contains(text(),'Passed away on')]
        postProcess:
          - replace:
              - regex: Passed away on (.+) at the age of \d+
                with: $1
          - parseDate: January 2, 2006
      HairColor: //span[@data-test="link_span_hair_color"]
      Weight:
        selector: //span[@data-test="link_span_weight"]
        postProcess:
          - replace:
            - regex: \skg
              with: ""

# Last Updated January 2, 2024
