{ "cells": [ { "cell_type": "markdown", "source": [ "# Update WikiData\n" ], "metadata": { "collapsed": false }, "id": "8ab9671b6edfa9f" }, { "cell_type": "code", "execution_count": 5, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Retrieved wikidata item.\n", "Claim P108 P580 {\n", " \"after\": 0,\n", " \"before\": 0,\n", " \"calendarmodel\": \"http://www.wikidata.org/entity/Q1985727\",\n", " \"precision\": 9,\n", " \"time\": \"+00000001980-01-01T00:00:00Z\",\n", " \"timezone\": 0\n", "} already exists.\n", "Claim P108 P582 {\n", " \"after\": 0,\n", " \"before\": 0,\n", " \"calendarmodel\": \"http://www.wikidata.org/entity/Q1985727\",\n", " \"precision\": 9,\n", " \"time\": \"+00000002003-01-01T00:00:00Z\",\n", " \"timezone\": 0\n", "} already exists.\n", "Reference P4656 https://de.wikipedia.org/wiki/Erhard_Blankenburg already exists for P108.\n", "Reference P854 https://www.linkedin.com/in/erhard-blankenburg-63938058/ already exists for P108.\n", "Modifications applied in an idempotent manner.\n" ] } ], "source": [ "import pywikibot\n", "from pywikibot import Claim, WbTime\n", "from datetime import datetime\n", "\n", "site = pywikibot.Site(\"wikidata\", \"wikidata\")\n", "repo = site.data_repository()\n", "\n", "item = pywikibot.ItemPage(repo, 'Q51595283')\n", "item.get()\n", "\n", "print(\"Retrieved wikidata item.\")\n", "\n", "# Function to check if a qualifier exists\n", "def qualifier_exists(claim, qualifier_property, target_value):\n", " for qualifier in claim.qualifiers.get(qualifier_property, []):\n", " if qualifier.getTarget() == target_value:\n", " print(f'Claim {claim.getID()} {qualifier_property} {target_value} already exists.')\n", " return True\n", " return False\n", "\n", "# Function to check if a reference exists\n", "def reference_exists(claim, source_property, target_url):\n", " for source in claim.sources:\n", " for prop_id, values in source.items():\n", " if prop_id == source_property:\n", " for value in values:\n", " if value.getTarget() == target_url:\n", " print(f'Reference {source_property} {target_url} already exists for {claim.getID()}.')\n", " return True\n", " return False\n", "\n", "# Ensure employment claim is not duplicated\n", "employment_claim_exists = False\n", "for claim in item.claims.get('P108', []): # P108 is 'employer'\n", " if claim.getTarget().getID() == 'Q1065414': # University of Amsterdam\n", " employment_claim_exists = True\n", " break\n", "\n", "if not employment_claim_exists:\n", " claim = Claim(repo, 'P108')\n", " target = pywikibot.ItemPage(repo, 'Q1065414')\n", " claim.setTarget(target)\n", " item.addClaim(claim)\n", " print(f'Created new claim {claim}...')\n", "\n", "# Add start and end time qualifiers if they don't already exist\n", "start_time = WbTime(year=1980)\n", "if not qualifier_exists(claim, 'P580', start_time):\n", " start_qualifier = Claim(repo, 'P580')\n", " start_qualifier.setTarget(start_time)\n", " claim.addQualifier(start_qualifier)\n", " print(f'Added new qualifier {start_qualifier}...')\n", "\n", "end_time = WbTime(year=2003)\n", "if not qualifier_exists(claim, 'P582', end_time):\n", " end_qualifier = Claim(repo, 'P582')\n", " end_qualifier.setTarget(end_time)\n", " claim.addQualifier(end_qualifier)\n", " print(f'Added new qualifier {end_qualifier}...')\n", "\n", "# Add references with 'retrieved at' qualifier\n", "current_datetime = datetime.utcnow()\n", "retrieved_at_datetime = WbTime(year=current_datetime.year, month=current_datetime.month, day=current_datetime.day)\n", "\n", "wikipedia_url = 'https://de.wikipedia.org/wiki/Erhard_Blankenburg'\n", "linkedin_url = 'https://www.linkedin.com/in/erhard-blankenburg-63938058/'\n", "\n", "if not reference_exists(claim, 'P4656', wikipedia_url):\n", " # Add Wikipedia reference\n", " wikipedia_reference = Claim(repo, 'P4656')\n", " wikipedia_reference.setTarget(wikipedia_url)\n", " retrieved_at_claim_wiki = Claim(repo, 'P813')\n", " retrieved_at_claim_wiki.setTarget(retrieved_at_datetime)\n", " wikipedia_reference.addQualifier(retrieved_at_claim_wiki)\n", " claim.addSources([wikipedia_reference])\n", " print(f'Added new source {wikipedia_reference}...')\n", "\n", "if not reference_exists(claim, 'P854', linkedin_url):\n", " # Add LinkedIn reference\n", " linkedin_reference = Claim(repo, 'P854')\n", " linkedin_reference.setTarget(linkedin_url)\n", " retrieved_at_claim_linkedin = Claim(repo, 'P813')\n", " retrieved_at_claim_linkedin.setTarget(retrieved_at_datetime)\n", " linkedin_reference.addQualifier(retrieved_at_claim_linkedin)\n", " claim.addSources([linkedin_reference])\n", " print(f'Added new source {linkedin_reference}...')\n", "\n", "print('Modifications applied in an idempotent manner.')\n", "\n" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-03-15T08:44:19.767213300Z", "start_time": "2024-03-15T08:44:19.382460Z" } }, "id": "59d15dc93174e6ad" }, { "cell_type": "code", "execution_count": null, "outputs": [], "source": [], "metadata": { "collapsed": false }, "id": "d702eb98f46957ca" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }