Chrome Application to Download Members


I have created a Chrome Application to download Yahoo Group members. You will need Chrome for this. It can be used to save the member data for group. You must have the authority to download members; in other words, you must be a moderator of the group. You must be signed into Yahoo to use this. It downloads the members to a HTML table then provides a button to download the data. When the button is clicked a "SaveAs" dialog will allow you to save a tab-delimited file.

 

If you have a previous version of this application then just replace the previous files with the files in the Zip file.

 

Download the Zip file YahooMembersApplication.zip, then create a directory for it, then copy the Zip file contents to the directory. Then go to Chrome and click the icon in the upper-right that has three bars. It will say "Customize and control Google Chrome" when you hover the mouse over it. From the menu choose "Tools" | "Extensions". In the upper-right is a checkbox for "Developer mode"; click on it if it is not selected to select it. Then in the upper-left you will see a button saying "Load unpacked extension...", click it. You will then need to select the folder you saved the files from the Zip file to. You should get an application called "Yahoo Group Members Import".

 

Then in the upper-left of Chrome there should be a toolbar button called "Apps". The icon for it is a multi-color matrix. Click on it. The Yahoo Group Members Import application should appear there; click on it. It is a very basic application, nothing fancy. For "Group" enter your Yahoo Group name, such as GroupManagersForum. Click Go and watch the table at the bottom of the page fill up. It will retrieve 100 members at a time.

 

Note that since the application was loaded with Developers Mode on, Chrome will nag you about it when you start Chrome. You can disable the application if you want and then re-enable it when you want to use it again.

 

Technical Details

 

This is some programmer-level technical details that you do not need to read if you are not technically inclined. If you are somewhat technically inclined and  are interested in understanding what this is doing then this might help.

 

This application is a Legacy Packaged Application. Specifically, it uses the following in the manifest: 


"app": {
    "launch": {"local_path": "members.html"}
    },

 

It is a Legacy Packaged Application because I was unable to figure out how to do cross-domain requests (get the membership information from Yahoo) using current Chrome technology. The cross-domain restriction is a limitation imposed by Chrome that all the current browsers impose, it is not a Yahoo limitation.

 

This is what the application does. The manifest specifies that Chrome is to begin the application by launching members.html. That page has the following in it:

 

<script type="text/javascript" src="membersimport.js"></script>

 

In membersimport.js the window.onload event sets the onclick events for the two buttons. The Downlaod button click event is set to execute the MemberImporter.RequestMembers function. The RequestMembers function initializes some variables (including disabling the "Save" button) then executes the NextBlock function.

 

The NextBlock function downloads 100 members at a time. The value 100 is a limitation imposed by Yahoo. NextBlock uses the XMLHttpRequest class to do the download. I was unable to get Ajax to work but it would be better to use it if it can be done. The onload and onerror events are set for the XMLHttpRequest. The onload event is bound to the ShowMembers function.

 

ShowMembers stores the JSON result in an array (for later use by the "Save" button) and parses the JSON result then adds each member to the HTML table. ShowMembers uses the ygData.total item in the JSON to determene if all the members have been obtained; if all members have been downloaded then it issues a relevant message, then enables the "Save" button then returns. If there are more members to download then it simply executes NextBlock again.