docs: public PhotoList<Photo> getPublicPhotos(String userId, Set<String> extras, int perPage, int page) throws FlickrException {
          PhotoList<Photo> photos = new PhotoList<Photo>();
  
          Map<String, Object> parameters = new HashMap<String, Object>();
          parameters.put("method", METHOD_GET_PUBLIC_PHOTOS);
  
          parameters.put("user_id", userId);
  
          if (perPage > 0) {
              parameters.put("per_page", "" + perPage);
          }
          if (page > 0) {
              parameters.put("page", "" + page);
          }
  
          if (extras != null) {
              parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ","));
          }
  
          Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
          if (response.isError()) {
              throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
          }
          Element photosElement = response.getPayload();
          photos.setPage(photosElement.getAttribute("page"));
          photos.setPages(photosElement.getAttribute("pages"));
          photos.setPerPage(photosElement.getAttribute("perpage"));
          photos.setTotal(photosElement.getAttribute("total"));
  
          NodeList photoNodes = photosElement.getElementsByTagName("photo");
          for (int i = 0; i < photoNodes.getLength(); i++) {
              Element photoElement = (Element) photoNodes.item(i);
              photos.add(PhotoUtils.createPhoto(photoElement));
          }
          return photos;
      }