{"id":13908744,"url":"https://github.com/microsoftarchive/wlist","last_synced_at":"2025-07-18T08:31:31.917Z","repository":{"id":28299077,"uuid":"31811678","full_name":"microsoftarchive/wlist","owner":"microsoftarchive","description":"A command line client for Wunderlist","archived":true,"fork":false,"pushed_at":"2017-06-26T22:45:56.000Z","size":941,"stargazers_count":39,"open_issues_count":8,"forks_count":4,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-11-25T18:39:05.973Z","etag":null,"topics":["wunderlist"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microsoftarchive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-07T12:42:50.000Z","updated_at":"2023-01-28T10:28:49.000Z","dependencies_parsed_at":"2022-08-27T15:23:42.059Z","dependency_job_id":null,"html_url":"https://github.com/microsoftarchive/wlist","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/microsoftarchive/wlist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoftarchive%2Fwlist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoftarchive%2Fwlist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoftarchive%2Fwlist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoftarchive%2Fwlist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microsoftarchive","download_url":"https://codeload.github.com/microsoftarchive/wlist/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoftarchive%2Fwlist/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265728814,"owners_count":23818729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["wunderlist"],"created_at":"2024-08-06T23:02:57.322Z","updated_at":"2025-07-18T08:31:31.613Z","avatar_url":"https://github.com/microsoftarchive.png","language":"Ruby","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# wlist\n\nA command-line tool for interacting with Wunderlist’s REST- and JSON-based API. It’s currently under initial development, but is already useful as a developer exploration tool, especially when used with the `-v` flag to display the `curl` statements used.\n\n![Screenshoot of wlist](screenshot.png)\n\nThere are two goals for `wlist`:\n\n1. Provide an easy to use way to explore the API and its output for developers\n2. Allow shell scripting of the API for integrations, especially with JSON tools like `jq`\n\nComfort with dealing with JSON data structures is assumed.\n\n## Installation\n\nFor now, clone this repository and then put `bin/wlist` on your path somehow.\n\n## Requirements\n\nTo use this tool, you’ll need the following:\n\n* Ruby, should be on your system. I’m using 2.2 here. YMMV with other versions\n* A client id. You can get one at the [Wunderlist Developer Site](https://developer.wunderlist.com/apps). Once you have it, you’ll want to set it in the `WLIST_CLIENT_ID` environment variable.\n* An access token. This is tough right now. We’re going to fix this ASAP.\n\nIf you try to use `wlist` without a `WLIST_CLIENT_ID` set, you’ll get gently nudged in the right direction:\n\n    $ bin/wlist inbox\n    Missing $WLIST_CLIENT_ID in environment\n    Visit https://developer.wunderlist.com/applications and create an app!\n\nLikewise with the access token\n\n    $ bin/wlist inbox\n    Missing $WLIST_ACCESS_TOKEN in environment.\n\nTo make all this easier, I have a fish script that sets these variables for me before calling `wlist`. Here’s what it looks like:\n\n    function wlist\n      source ~/.envrc/wunderlist_poke.fish\n      eval $HOME/GitHub/wunderlist/wlist/bin/wlist $argv\n    end\n\nMy `~/.envrc/wunderlist_poke.fish` simply has:\n\n    set -x WLIST_CLIENT_ID id\n    set -x WLIST_ACCESS_TOKEN token\n\nYah. Most people use Bash or Zsh. Let’s fix this up for them too so that they don’t have to translate in the mind.\n\n## An example walk through\n\nOk, let’s assume you’re setup with your client id and access token. Let’s take `wlist` for a spin! The first thing you might want to do is to get some information about your inbox:\n\n```\n$ wlist inbox\n```\n\n```json\n{\n  \"id\": 105743947,\n  \"created_at\": \"2014-03-27T10:21:30.308Z\",\n  \"list_type\": \"inbox\",\n  \"public\": false,\n  \"revision\": 1957,\n  \"title\": \"inbox\",\n  \"type\": \"list\"\n}\n```\n\nThe JSON returned is a direct map of the inbox list properties on the Wunderlist servers. If `wlist` was just aimed for non-developers, it would probably give us a list of tasks in our inbox, but we want to make sure that we’re reflecting the API appropriately so that you can explore how it works.\n\nSo, using the inbox properties, we can use the `id` property and get that list:\n\n```json\n$ wlist list:tasks -i 105743947\n```\n\n```\n[\n  {\n    \"id\": 1032917523,\n    \"created_at\": \"2015-03-08T07:50:20.807Z\",\n    \"created_by_id\": 6007632,\n    \"created_by_request_id\": \"d46c6d8d45e73a232c56:441EBB5C-9D53-438E-934B-773E66E844E8:6164D6EE-0A3F-4077-ACD6-80DD836D25C3:6007632:12CF5985-A746-4A7A-AC51-BEB63FC83588\",\n    \"due_date\": \"2015-03-08\",\n    \"completed\": false,\n    \"starred\": false,\n    \"list_id\": 105743947,\n    \"revision\": 1,\n    \"title\": \"Connect Sunrise to personal calendars\",\n    \"type\": \"task\"\n  },\n  {\n    \"id\": 1033100007,\n    \"created_at\": \"2015-03-08T11:52:26.706Z\",\n    \"created_by_id\": 6007632,\n    \"completed\": false,\n    \"starred\": true,\n    \"list_id\": 105743947,\n    \"revision\": 7,\n    \"title\": \"Get some coffee\",\n    \"type\": \"task\"\n  }\n]\n```\n\nThere are two tasks in this inbox. What if we want to change the title of that second event to include who we’re going to have coffee with? One way to do this is to pipe a JSON structure containing a new `title` and the `revision` of the task into `wlist` as follows:\n\n```\n$\necho '{\"title\": \"Get coffee with Chad\", \"revision\": 7}' | wlist task:update -i 1033100007\n```\n```json\n{\n  \"id\": 1033100007,\n  \"created_at\": \"2015-03-08T11:52:26.706Z\",\n  \"created_by_id\": 6007632,\n  \"completed\": false,\n  \"starred\": true,\n  \"list_id\": 105743947,\n  \"revision\": 8,\n  \"title\": \"Get coffee with Chad\",\n  \"type\": \"task\"\n}\n```\n\nThe `revision` is essential so that the server knows whether or not you have the current data. Here’s what you’d get back if you try the command again with an invalid `revision`:\n\n```json\n{\n  \"error\": {\n    \"type\": \"conflict\",\n    \"translation_key\": \"api_error_conflict\",\n    \"message\": \"There is a conflict with the given data.\",\n    \"revision_conflict\": true\n  }\n}\n```\n\n### Pipelining as a shortcut\n\nWhen `wlist` is run in a pipeline, it can pick up JSON data from a previous command and use that as part of the next request. For example, if we’ve stored the id for our task, we can quickly star it with the following command:\n\n```\n$ wlist task -i 1033100007 | wlist task:update --star\n```\n```json\n{\n \"id\": 1033100007,\n \"created_at\": \"2015-03-08T11:52:26.706Z\",\n \"created_by_id\": 6007632,\n \"completed\": false,\n \"starred\": true,\n \"list_id\": 105743947,\n \"revision\": 18,\n \"title\": \"Get coffee with Chad\",\n \"type\": \"task\"\n}\n```\n\n### Lists\n\nWunderlist manages more than just an inbox list. It can hold as many lists as you want. To get all the lists a user has access to, use the `lists` command:\n\n```\n$ wlist lists\n```\n\n```json\n[\n  {\n    \"id\": 81895952,\n    \"created_at\": \"2013-08-09T11:39:08.246Z\",\n    \"list_type\": \"list\",\n    \"public\": false,\n    \"revision\": 2,\n    \"title\": \"Movies to Watch\",\n    \"type\": \"list\"\n  },\n  {\n    \"id\": 105743947,\n    \"created_at\": \"2014-03-27T10:21:30.308Z\",\n    \"list_type\": \"inbox\",\n    \"public\": false,\n    \"revision\": 1958,\n    \"title\": \"inbox\",\n    \"type\": \"list\"\n  }\n]\n```\n\nThen, to get all the tasks for a list, you can use the `list:tasks` command:\n\n```\n$ wlist list:tasks -i 81895952\n```\n```json\n[\n  {\n    \"id\": 406750264,\n    \"created_at\": \"2013-08-27T02:33:20.493Z\",\n    \"created_by_id\": 6007632,\n    \"completed\": false,\n    \"starred\": false,\n    \"list_id\": 81895952,\n    \"revision\": 0,\n    \"title\": \"Meet the Parents\",\n    \"type\": \"task\"\n  }\n]\n```\n\n### Convenience Commands\n\nAs benefits its status as a developer aid, the `wlist` commands so far make you think in terms of the API. However, we don’t want it to be bulky to use for everyday use, so we have several convenience commands. The first of these is a way to list the tasks in your inbox:\n\n```\n$ wlist inbox:tasks\n```\n\nThis is exactly equivalent to what we did at the start of the walkthrough: it gets the list of tasks after getting the `id` of the current user’s inbox.\n\n\n### Tracing Requests and getting Curl Commands\n\nIn addition to directly working with the Wunderlist API JSON formats, `wlist` gives you the ability to trace what goes into making a particular request. Use the `-v` or `--verbose` flag with any command and you’ll see a `curl` command used to make the request. This command can be copied, pasted, and ran by itself.\n\n```\n$ wlist list:tasks -i 105743947 -v\ncurl -s -H 'Content-Type: application/json' -H 'X-Client-ID: WLIST_CLIENT_ID' -H 'X-Access-Token: WLIST_ACCESS_TOKEN' -X GET 'https://a.wunderlist.com/api/v1/tasks?list_id=105743947'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrosoftarchive%2Fwlist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrosoftarchive%2Fwlist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrosoftarchive%2Fwlist/lists"}