A Django application that adds an URL shortener to your site similar to bit.ly.
This is a fork of [django-tinylinks](https://github.com/bitmazk/django-tinylinks).
This project adds a REST API and integration with the [Piwik](https://piwik.org/) Open Analytics Platform.
You need to install the following prerequisites in order to use this app:
pip install Django==2.2 pip install urllib3==1.25.1 pip install djangorestframework==3.9.2
If you want to install the latest stable release from PyPi:
$ pip install TODO
Add tinylinks
to your INSTALLED_APPS
:
INSTALLED_APPS = [ ..., 'tinylinks', ]
Add the tinylinks
URLs to your urls.py
:
urlpatterns = [ ... re_path(r'^s/', include('tinylinks.urls')), ]
Don't forget to migrate your database:
./manage.py migrate tinylinks
Default: 6
Integer representing the number of characters for your tinylinks. This setting is used when the app suggests a new tinylink. Regardless of this setting users will be able to create custom tinylinks with up to 32 characters.
Default: 10
Number of minutes between two runs of the check command. This number should be big enough so that one run can complete before the next run is scheduled.
Default: 300
Number of minutes in which all URLs should have been updated at least once. If this is 300 it means that within 5 hours we want to update all URLs.
If TINYLINK_CHECK_INTERVAL
is 10 it means that we will run the command
every 10 minutes. Combined with a total time of 300 minutes, this means that we
can execute the command 300/10=30 times during one period.
Now we can devide the total number of URLs by 30 and on each run we will update the X most recent URLs. After 10 runs, we will have updated all URLs.
Default: 10
Number of items to display on the list page '/s/list'.
Default: None
The Piwik ID for the of the website in which this app is installed. This should be easily found on the Settings page under the Websites menu.
Default: None
This is the URL at which your copy of Piwik is running.
Default: None
The API key provided by Piwik.
Default: None
The path for the MaxMind GeoIP data.
Just visit the root URL of the app. Let's assume you hooked the app into your
urls.py
at s/, then visit example.com/s/. You will see your tinylist
overview. Go to example.com/s/create/ to see a form to submit a new long URL.
After submitting, you will be redirected to a new page which shows the generated short URL. If you want this URL to have a different short URL, just change the short URL to your liking.
Now visit example.com/s/yourshorturl and you will be redirected to your long URL.
If you want to export the data to Piwik, you will have to own a clean installation of it, so go and download it from (piwik.org)[https://piwik.org/] and then follow the (installation guide)[https://piwik.org/docs/installation-maintenance/].
The API is created using django rest framework and it has 6 resources at the moment.
/api/tinylinks/
The API allows you to retrievce, create, delete and update your tinylinks.
Creating and modifying tinylinks requires authentication and a valid csrf token.
DEFINITION:
GET https://example.com/s/api/tinylinks/{TINYLINK_ID}/
EXAMPLE REQUEST:
curl https://example.com/s/api/tinylinks/{TINYLINK_ID}/
DEFINITION:
POST https://example.com/s/api/tinylinks/
EXAMPLE REQUEST:
curl -X POST https://example.com/s/api/tinylinks/ -u user:pass -d "long_url=https://google.com/&short_url=goog"
DEFINITION:
PUT https://example.com/s/api/tinylinks/{TINYLINK_ID}/
EXAMPLE REQUEST:
curl -X PUT https://example.com/s/api/tinylinks/{TINYLINK_ID}/ -u user:pass -d "long_url=https://google.com/&short_url=g"
DEFINITION:
PATCH https://example.com/s/api/tinylinks/{TINYLINK_ID}/
EXAMPLE REQUEST:
curl -X PATCH https://example.com/s/api/tinylinks/{TINYLINK_ID}/ -u user:pass -d "short_url=g"
DEFINITION:
DELETE https://example.com/s/api/tinylinks/{TINYLINK_ID}/
EXAMPLE REQUEST:
curl https://example.com/s/api/tinylinks/{TINYLINK_ID}/ -u user:pass
/api/users/
This resource exposes information about users.
DEFINITION:
GET https://example.com/s/api/users/{USER_ID}/
EXAMPLE REQUEST:
curl https://example.com/s/api/users/{USER_ID}/
/api/db-stats/
Retrieve general information about the links stored in the database. Offers a simple way to acces the total number of links and the total number of clicks.
DEFINITION:
GET https://example.com/s/api/db-stats/
EXAMPLE REQUEST:
curl https://example.com/s/api/db-stats/
/api/stats/
Retrieve a list of statistics for every tinylinks object in the database.
Query Paramanters:
- paginate_by
- page
DEFINITION:
GET https://example.com/s/api/stats/
EXAMPLE REQUEST:
curl https://example.com/s/api/stats/
/api/url-stats/
Retrieve statistics for individual tinylink objects.
Query Parameters:
- short_url
DEFINITION:
GET https://example.com/s/api/url-stats/{SHORT_URL}/
EXAMPLE REQUEST:
curl https://example.com/s/api/url-stats/{SHORT_URL}/
/api/expand/
Expand the short link into the long link.
Query Parameters:
- short_url
DEFINITION:
GET https://example.com/s/api/expand/{SHORT_URL}/
EXAMPLE REQUEST:
curl https://example.com/s/api/expand{SHORT_URL}/
If you want to contribute to this project, please perform the following steps:
# Fork this repository # Clone your fork $ mkvirtualenv -p python3.6 django-tinylinks $ pip install -r requirements.txt $ ./manage.py test # You should get no failing tests $ Run coverage to generate a .coverage file, then run # coverage json $ To generate a json file, and then run # ./badgegen.py $ To generate the badge $ git co -b feature_branch master # Implement your feature and tests $ ./manage.py test # You should still get no failing tests # Describe your change in the CHANGELOG.txt $ git add . && git commit $ git push origin feature_branch # Send us a pull request for your feature branch
If you are making changes that need to be tested in a browser (i.e. to the
CSS or JS files), you might want to setup a Django project, follow the
installation insttructions above, then run python setup.py develop
. This
will just place an egg-link to your cloned fork in your project's virtualenv.
Check the issue tracker on github for milestones and features to come.