mainwelcome-a-bit for Wikinews - Summary

 
 
Membership Info
Group Admin:
1 active member

Group identification
Id: 11906
System Name: weabit
Name: welcome-a-bit for Wikinews
Group Type: non-GNU software and documentation

Search in this Group


 

This group is not part of the GNU Project.

This project is designed to encourage involvement of people with newly submitted articles at Wikinews by sending them instant notifications of new submissions in their topics of interest.

To sign up, add your name to the page https://en.wikinews.org/wiki/User:Gryllida/welcome_a_bit .

Currently we support delivery of notifications by e-mail. We may deliver the notifications to wiki pages, Android push notifications, or IRC in the future; if you are interested in any of these methods please send me a message.

This project is in the beta stage. You are encouraged to test it and share your feedback. To report any bugs or suggestions, please leave a message using any of the below venues:

- e-mail -email is unavailable-
- open an issue using the 'issues' link at the top
- query live chat at #wikinews at freenode
- leave a message on-wiki at https://en.wikinews.org/wiki/User_talk:Gryllida/welcome_a_bit

Draft version



# Copyright (C) 2018 Svetlana Tkachenko svetlana@members.fsf.org
#
#    This file is part of WeABit, Welcome-a-bit for Wikinews.
#
#    WeABit is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    WeABit is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with WeABit.  If not, see <https://www.gnu.org/licenses/>.

# 1. read in a list of rss feeds and usernames
# 2.

use strict;
use warnings;

use open ':std', ':encoding(UTF-8)';

use MediaWiki::API;
use LWP::Simple;

use Data::Dumper;
use String::Util qw(trim);
use POSIX qw(strftime);

# use wabget;

my $mw = MediaWiki::API->new();
my $wikiURL = 'https://en.wikinews.org'; # /w/api.php';
$mw->{config}->{api_url} = "$wikiURL/w/api.php";

while(1){
  my $datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
  printf("date and time - $datestring\n");
  # get category members of 'Gryllida/WAB'
  my $members_ref = $mw->api ( {
    action      => 'query',
    list => 'categorymembers',
    cmtitle => 'Category:Gryllida/WAB4',
    cmlimit => 500
  });
  my $members = $members_ref->{query}->{categorymembers};
  my $n = scalar(@{$members});

  # For each WAB tracking page, extract the username and categories therein.
  my $tracker={};
  my $oldStamp = 0;
  for (my $i=0; $i < $n; $i++) {
    my $output = {};
    my $title = $members->[$i]->{title};
    my @partsOfTitle = split /\//, $title;
    $partsOfTitle[0] =~ s/User\://;
    my $username =$partsOfTitle[0];
    my $typeOfArticles =$partsOfTitle[2]; # dev or pub
    my $deliveryType =$partsOfTitle[3]; # email or wiki
    # Get the user's time stamp
    my $talkPageTitle = "User talk:$username/wab/$typeOfArticles/$deliveryType";
    my $url2 = "$wikiURL/wiki/$talkPageTitle?action=raw";
    my $content2 = get($url2);
    my @lines2 =  split /^/, $content2;
    my $userTs = $lines2[0];
    print "User time stamp: $userTs (for $username) \r\n";
    # Get list of categories of the user
    my $url = "$wikiURL/wiki/$title?action=raw";
    my $content = get($url);
    my @lines =  split /^/, $content;

    for my $line (@lines){
      chomp($line);
      if ($line =~ s/\*(.*)/$1/){
        my $cat = trim($line);

        my $uinfo = {
          'deliveryType' => $deliveryType,
          'talkPageTitle' => $talkPageTitle,
          'userTs' => $userTs,
          'username' => $username
        };
        push @{$tracker->{$cat}->{$typeOfArticles}}, $uinfo;
        if($userTs > $oldStamp){
          $oldStamp = $userTs;
        }
      }
    }
  }
  # rcstart = $oldStamp
  my $raw_newpages_ref = $mw->api ( {
    action      => 'query',
    list => 'recentchanges',
#   rcstart => $oldStamp, # XXX add this
    rctype => 'categorize',
    rcprop => 'user|title|ids'
#   rcnamespace => 0,
#   prop => 'title'
  });

  my $newpages_ref = $raw_newpages_ref->{query}->{recentchanges};

  my $deliveryBuffer = {};
  for my $newpageinfo (@{$newpages_ref}){
    print Dumper $newpageinfo;
    my $categorizer = $newpageinfo->{user};
    my $pageId = $newpageinfo->{pageid};
    $newpageinfo->{title} =~ s/.*?:(.*)/$1/;
    my $catName = $newpageinfo->{title};
    print "Category: $catName\r\n";

    if(!exists $tracker->{$catName}){next;}
    print "Processing category '$catName'\r\n";


    my $raw_pagecats = $mw->api ( {
      action      => 'query',
      prop => 'categories',
      pageids => $pageId,
    });
    print "Raw $pageId page category data: ";
    my $ns = $raw_pagecats->{query}->{pages}->{$pageId}->{ns};
    my $cats = $raw_pagecats->{query}->{pages}->{$pageId}->{categories};
    my $catsTitles = [map { $_->{title} } @$cats];
    map {s/Category\://g; } @{$catsTitles};
    print Dumper $catsTitles;
    print "...done.\r\n";
    my $articleType = '';
    if('Published' ~~ $catsTitles){
      $articleType = 'pub';
    }else{
      $articleType = 'dev';
    }

    #2. Add to delivery
    if(!exists $tracker->{$catName}->{$articleType}){next;}
    print "Processing category '$catName'\r\n";
    print Dumper  $tracker->{$catName}->{$articleType};
    my $deliveryTargets = $tracker->{$catName}->{$articleType};
    for my $deliveryTarget (@{$deliveryTargets}){
      if($deliveryBuffer->{$deliveryTarget->{username}}->{$pageId}){next;}
      print "Page ID: $pageId\r\n";
      $deliveryBuffer->{$deliveryTarget->{username}}->{$pageId} = $deliveryTarget;
      print Dumper $deliveryBuffer;
    }
  }
  # print Dumper $deliveryBuffer;
  exit;
  sleep(600); # check every 10 minutes
}


Registration Date: Sat 16 Feb 2019 11:16:54 AM UTC
License: GNU General Public License v3 or later
Development Status: 4 - Beta

 

Latest News rss feed
Version 2.1 released
     posted by svetlana, Mon 18 Feb 2019 07:24:21 PM UTC

Hi all,

Version 2.1 has been released on February 18, 2019. It is in the beta phase.

This project is designed to encourage involvement of people with newly submitted articles at Wikinews by sending them instant notifications of new submissions in their topics of interest. [...]

Quick Overview
 Memberlist (1 member)

Communication Tools
 This group is looking for people (4 contributors wanted)

Development Tools
 Patch Manager (open items: 1, total: 1)

Back to the top

Powered by Savane 3.13-3230.
Corresponding source code