The Nonprofit News Network: A nonprofit news aggregation site built with Drupal

I just recently launched the Nonprofit News Network, a news aggregation site focused on the world of nonprofits. Why you might ask? Well, first of all I have an interest in the business of nonprofits. I was also looking for a technical project that would allow me to develop a news aggregation site using open source tools. In this case I chose Drupal.

Why Drupal?
I chose Drupal because of its robust open source community and secondly for the FeedAPI module that allowed me to easily setup feeds and bring content into the system.

While I was familiar with Drupal as an open source content management framework I had never worked with it before. I quickly realized after researching it at drupal.org, that there is a robust and well developed community of open source developers that contribute modules to the Drupal core that extend its functionality. I would guess that if there is something you are trying to accomplish, there is a developer out there who has probably created a module to help solve that problem.

I am also not a programmer, so I needed a content managment system that would allow me to develop a site based on my needs with a minimum of php or other code hacking. The FeedAPI module is a great example of meeting my needs. I knew that I wanted to bring in feeds of content that pertained to the nonprofit sector and I also needed to be able to do this quickly with a minimum amount (or none ideally) code tweaking. By using the FeedAPI module I was able to do just that.

A few thoughts on what version to use, 5.x or 6.x. Drupal offers you the ability to install two different versions of the system, the 5.x or the latest 6.x release. Initially I thought I was going to have to use the 5.x version because the server specs of my hosting provider, Hosting Matters, did not match the 6.x requirements. I dropped them a note and they were able to move me to a different system that would support the 6.x version.

I would recommend going with the 6.x version if you are developing a new site. The most popular modules all have 6.x support and at some point (I am guessing) the 5.x version will no longer be actively supported.

There is a new, 7.x version in the works. At some point in the future I am sure I will have to weigh the advantages of migrating my site over. Luckily for me, I think I have some time before I have to make that decision.

My approach
The basic goal of the site it to provide a single web destination that aggregates the best of news, blogs and other content as it relates to nonprofits. I wanted to manually edit the site instead of just letting the content flow through, so I also needed a way to bring the content in, categorize it and then stage it, ready to be edited.

I created my “taxonomy” for the site by breaking the content down into the following categories: Nonprofit news, marketing, fundraising, technology, management and jobs.

Currently I have over 80 feeds coming into the system and I review and edit the content each morning prior to heading into work (I called this project my 5 a.m. job, although I usually don’t make it out of bed until 5:30). I have also created a content type that allows me to manually post content I find interesting from other sources on the web such as newspaper, magazine and blogs that have articles relating to the subject of nonprofits.

I also wanted to post items to Twitter (there’s a module for that).

The details
Once I had Drupal setup and installed at my domain, I began the task of identifying the core modules I thought I would need to build out the site. I spent a lot of time at drupal.org and also doing some web searches to discover how people were approaching various web development problems with Drupal. Here are my del.iciou.us Drupal links.

I found Sean Effel’s Drupaltherapy.com site particularly helpful. In the beginning I watched this screencast on the FeedAPI over and over.

I determined that I needed the following modules to start:

  • FeedAPI
  • CCK
  • Views
  • Taxonomy

Once I had those modules setup, I began the task of creating some feeds and bringing content into the site. I initially thought I would make more use of the Feed Element Mapper and CCK fields, but I found that for my use (primarily inbound RSS feeds) I was able to do little to no mapping to custom fields and still get the display I needed.

Initially I chose one feed that I thought would be the least problematic, included full-text and other RSS metadata. Once I had that setup and content was flowing into the system, I started working on how to display it on the site.

I knew that I wanted content to be available on the site in four areas or methods: at the “article” level, within a category level (for example, all marketing stories), on the home page and in an archive (by date).

I started at the article or “node” level in Drupal’s vocabulary. Given that this is an aggregation site, I wanted to display only a certain number of characters, the source of the article and a link to the original article.

This probably took me the longest to get it just the way I wanted it to display. I went through several iterations before settling on my final approach. First of all I would recommend doing as much of this work as possible in the Views module. It will take you awhile to get your head around this powerful module, but it is worth the effort. I ended up using views and made a small customization to the node template in order to link the source to the original article url.

I won’t go into the details in this post, but I’m slow, and it took me awhile to figure this out. Views will often get you 90% of the way, but for that final push, you may need to use some php and tweak the template files. But this really all depends on what you are trying to accomplish.

I used the Taxonomy module to create the sections of the site. I also assign feeds to a category as I create them in the system. That way I can edit or view all content based on the category.

I still am struggling a bit with the display of content on the site. I chose the Newswire theme as it seemed to offer the basic framework for what I was trying to build out-of-the-box. I have not customized it at all at this point. I have some tweaks that I would like to make, but for now I’m pretty happy (well, at least for version 1) with the layout and look of the site.

Theming is another aspect of Drupal that is going to take me some time to learn. I’m not that solid with CSS, but I know enough to hack around and make changes when needed. Again, there are a lot of themes out there and depending on your needs, you could probably get a site up and running without ever learning the ins and outs of theming.

Once I had the site up and running I added a few more modules. The Twitter module offers several features, but I am using it to post content to the npnewsnetwork handle I setup on Twitter. There is a check box in the content admin area and once that is selected and I hit publish, the post is created at my Twitter account. This module provides me with a simple, automated way to post content to Twitter.

Overall it took me about three weeks (on a part-time basis) to get the site up and running. To date I have been very happy with my technology choice and I know I’ll continue to improve and add features as I move forward with the development of the site.

If you have any questions regarding the specifics on how something was implemented post a comment or drop me a note. I would be happy to share what I have learned. It might not be the “best” way to get it done, but it works for me.