def METHOD_NAME(cls):
    """
    Query the MetaCRAN JSON API for the latest 50 uploads to CRAN.
    Yields:
        Tuple[str, str, str, str]: Tuple of:
            * The name of the project.
            * The homepage of the project.
            * This backend's name.
            * The version of the project.
    Raises:
        AnityaPluginException: If the URL was unreachable or the response was in an unexpected
            format.
    """
    url = "https://crandb.r-pkg.org/-/pkgreleases?descending=true&limit=50"
    try:
        response = cls.call_url(url)
    except requests.RequestException as e:  # pragma: no cover
        raise AnityaPluginException(f"Could not contact {url}: {str(e)}") from e
    if response.status_code != 200:  # pragma: no cover
        raise AnityaPluginException(
            f"Failed to download from {url}: {response.status_code} "
            f"{response.reason}"
        )
    try:
        data = response.json()
    except json.JSONDecodeError as err:  # pragma: no cover
        raise AnityaPluginException(f"No JSON returned by {url}") from err
    for item in data:
        name = item["name"]
        package = item["package"]
        homepage = package.get(
            "URL", "https://cran.r-project.org/web/packages/" + name
        )
        version = package["Version"]
        yield name, homepage, cls.name, version