Skip to main content

Allow running fluser_lookup against the Commons Explorer

ID
d9635bb
date
2024-03-07 10:49:51+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
032146f
message
Allow running fluser_lookup against the Commons Explorer
changed files
3 files, 40 additions, 5 deletions

Changed files

.github/workflows/test.yml (1281) → .github/workflows/test.yml (1326)

diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 44a57af..7fc3d20 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -42,6 +42,7 @@ jobs:
     - name: Run tests
       run: |
         py.test aws/test_s3tree.py
+        py.test flickr/test_fluser_lookup.py
         py.test text/test_fix_twitter_thread.py
         py.test textexpander/test_get_mastodon_text.py
         py.test web/test_save_ao3_links.py

flickr/fluser_lookup.py (1204) → flickr/fluser_lookup.py (1563)

diff --git a/flickr/fluser_lookup.py b/flickr/fluser_lookup.py
index 9b37249..6229bec 100755
--- a/flickr/fluser_lookup.py
+++ b/flickr/fluser_lookup.py
@@ -15,9 +15,23 @@ import re
 import sys
 
 from flickr_photos_api import FlickrPhotosApi
+import hyperlink
 import keyring
 
 
+def get_user_id(user_text: str) -> str:
+    u = hyperlink.URL.from_text(user_text)
+
+    # e.g. https://www.youtube.com/watch?v=0naRXbQQ838
+    if (
+        u.host == "commons.flickr.org"
+        and len(u.path) == 3
+        and u.path[0] == "members"
+        and u.path[2] == ""
+    ):
+        return {"path_alias": u.path[1]}
+
+
 if __name__ == "__main__":
     try:
         USER_TEXT = sys.argv[1]
@@ -29,12 +43,16 @@ if __name__ == "__main__":
         user_agent="Alex Chan's personal scripts <alex@alexwlchan.net>",
     )
 
-    if USER_TEXT.startswith("https://"):
-        user = api.lookup_user_by_url(url=USER_TEXT)
-    elif re.match(USER_TEXT, "^[0-9]{7}@N[0-9]{2}$"):
-        user = api.lookup_user_by_id(user_id=USER_TEXT)
+    user_id = get_user_id(USER_TEXT)
+
+    if "path_alias" in user_id:
+        user = api.lookup_user_by_url(
+            url=f"https://www.flickr.com/people/{user_id['path_alias']}"
+        )
     else:
-        user = api.lookup_user_by_url(url=f"https://www.flickr.com/people/{USER_TEXT}")
+        user = api.lookup_user_by_id(
+            url=f"https://www.flickr.com/people/{user_id['id']}"
+        )
 
     print(f"ID:       {user['id']}")
     print(f"username: {user['username']}")

flickr/test_fluser_lookup.py (0) → flickr/test_fluser_lookup.py (356)

diff --git a/flickr/test_fluser_lookup.py b/flickr/test_fluser_lookup.py
new file mode 100644
index 0000000..2b2835f
--- /dev/null
+++ b/flickr/test_fluser_lookup.py
@@ -0,0 +1,16 @@
+import pytest
+
+from fluser_lookup import get_user_id
+
+
+@pytest.mark.parametrize(
+    ["user_text", "user_id"],
+    [
+        (
+            "https://commons.flickr.org/members/csj_canada_archives/",
+            {"path_alias": "csj_canada_archives"},
+        ),
+    ],
+)
+def test_get_user_id(user_text, user_id):
+    assert get_user_id(user_text) == user_id