rss و استفاده از كتابخانه jsoup
سلام دوستان
یك فیدریدر میخوام درست كنم كه اخبار رو از سایتهای مختلفی میگیره ، كه بعضی از این سایتها rss دارند و بعضی دیگر ندارندمن با توجه به پروژه استاد قسمتی از كارها رو تونستم انجام بدم. اما چند كار دیگه هست كه میخوام انجام بدم هر كاری كردم نشد. 1- برای استفاده از كتابخانه jsoup حتما باید Html رو بلد باشم؟ و با این دستورات كار كنم ؟
2- دستورات این كتابخانه رو كسی میتونه به فارسی یه شرح جزئی بكنه؟
3- برای اینكه عكس مطلب و ادامه مطلب رو در نرم افزار فید ریدرم داشته باشم از كدام دستورات كتابخانه jsoup استفاده كنم؟
4- چون صفحه خبر همیشه اپدیت میشه وقتی كه از این كتابخانه برای گرفتن خبر استفاده كنیم مشكلی پیش نمیاد ؟ مثلا من اخبار ورزشی را گرفتم با استفاده از این كتابخانه ، حالا اگه اخبار جدید بیاد و روی قسمت ورزشی در نرم افزار كلیك بشه توی نرم افزارم اپدیت میشه؟
ببخشید خیلی طولانی شد ، ممنون
یه چیزایی رو تونستم درست كنم ، تونستم لینكهای صفحهای رو كه میخوام بگیرم ولی یه مشكلی داره ، تمام لینكهای داخل صفحه رو میگیره در حالی كه من فقط لینك اخبار رو میخوام ، مثلا نمیخوام لینك ثبت نام در سایت یا لینك درباره ما و غیره رو بگیرم فقط لینك اخبار رو چجوری بگیرم؟
doc = Jsoup.connect("http://example.com/").get();
Elements links = doc.select("a[href]");
for (Element link: links) {
Log.i("LOG", "\nlink : " + link.attr("href"));
Log.i("LOG", "text : " + link.text());
دوست عزیز خیلی ممنون، من روی كتابخانه JSOUP كار كردم و تقریبا بیشتر دستورات رو الان خوب بلدم ، فقط چندتا سوال دیگه دارم ممنون میشم كمكم كنی.
1- لینك اخبار و لینك عكسها رو با JSOUP گرفتم ، چجوری در لیست ویو بزارمشون هر كاری كردم نتونستم روى ليست ويو نمايشش بدم
2- لينك عكسم دارم ایا كتابخانه خاصی میخواد برای اینكه در لیست ویو نمایشش بدم؟
3- میشه با rss مثلا اخبار ورزشی سایت الف رو گرفت و با JSOUP اخبار ورزشی سایت ب و هردو رو با هم توی لیست ویو نمایش داد؟
4- برای لینك ادامه مطلب میتونم لینك رو بگیرم ولی چجوری تكست توی مطلب رو بگیرم و همراه با عكس توی مثلا یه فورم نمایش بدم؟ دستور خاصی میخواد؟
-
Document doc = Jsoup.connect("http://site.com/NewsListing.aspx?pageid=451").get();
Elements resentLink = doc.getElementsByClass("topStoryItem");
Elements links = resentLink.select("h1 a[href]");
Elements imgs = resentLink.select("img[src]");
Element logo = doc.head().select("link[href~=.*\\.(ico|png)]").first();
Log.i("LOG", "Logo : " + logo.attr("content"));
Log.i("LOG",logo.attr("href"));
for (Element link: links) {
newsLink.add(link.attr("href"));
Log.i("LOG", link.attr("href"));
}
for (Element img: imgs) {
newsImage.add(img.attr("src"));
Log.i("LOG",img.attr("src"));
}
دوستان محترم لطفا راهنمایی كنید ، بعضی از سایتا rss دارن و بعضیاشون ندارن با jsoap اونایی كه rss ندارن رو میتونم بگیرم
ولی مشكلم اضافه كردنشون به لیست ویو هست ، خیلی مشكله هر كاری كردم نشد.
با این شیوه پروژه تون رو پیاده کنید بهتره به نظرم:
بین ویژگی های تمام منابع اونایی که مشترک هستن رو استخراج کنید و بر اساس اونا یه جدول در دیتابیس ایجاد کنید، مثلا همه منابع ممکنه عنوان و لینک داشته باشن، ولی ممکنه بعضی عکس یا تاریخ نداشته باشن، پس ویژگی مشترک میشه عنوان و لینک.
بار اول که برنامه اجرا میشه دیتابیس خالی هست پس دستوری صادر میشه که اطلاعات از اینترنت دریافت و در دیتابیس ثبت بشه، و بعد از اتمام کار لیست شما با استفاده از اطلاعات دیتابیس نمایش داده بشه.
دفعات بعد که برنامه اجرا میشه چون دیتابیس خالی نیست از همون اطلاعات قبلی استفاده میکنه و لیست رو نمایش میده، در همین حین بصورت خودکار یا در زمان دیگری با دستور کاربر دوباره اون قسمت مربوط از برنامه شروع میکنه به بروزسانی، حالا اگر موارد جدیدی در دیتابیس ثبت شد، لیست موارد جدید رو هم از دیتابیس دریافت میکنه و نمایش میده.
پس ارتباط مستقیمی بین قسمتی که اطلاعات رو از اینترنت میگیره و قسمتی که لیست نمایش میده وجود نداره. بلکه هر کدوم جداگانه با دیتابیس در ارتباط هستن.
نکته دیگه، اگر هدف برنامه ای مثل «آخرین خبر» هست، استفاده از JSoup و امثالش اصلا گزینه مناسبی نیست، چون هم ترافیک مصرفی بالا میره، و هم با یه تغییر در ساختار سایت برنامه به درستی کار نخواهد کرد.
محتوا باید توسط یه WebService آماده استفاده برنامه باشه، روشی که اغلب برنامه های موجود طبق اون عمل میکنن.
سلام ، دوستان با نمایش عكس با كتابخانه picaso مشكل دارم ، لینك همه عكسای خبر رو میگیرم ولی چجوری با استفاده از این كتابخانه توی لیست ویو كنار تكست خبر نمایشش بدم ، از كدهاش استفاده كردم ولی خطا میده
كدهای داخل كلاس AdapterNote
public class AdapterNote extends ArrayAdapter<StructNote> {
public AdapterNote(ArrayList<StructNote> array) {
super(G.context, R.layout.adapter_notes, array);
}
private static class ViewHolder {
public ViewGroup layoutRoot;
public TextView txtSiteName;
public TextView txtTime;
public TextView txtListName;
public TextView txtTitle;
public ImageView imgNews;
public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.txtTitle);
txtSiteName = (TextView) view.findViewById(R.id.txtSiteName);
txtTime = (TextView) view.findViewById(R.id.txtTime);
txtListName = (TextView) view.findViewById(R.id.txtListName);
imgNews = (ImageView) view.findViewById(R.id.imgNews);
}
public void fill(final ArrayAdapter<StructNote> adapter, final StructNote item, final int position) {
// txtTitle.setText(item.title);
txtSiteName.setText(item.siteName);
txtListName.setText(item.listName);
txtTime.setText(item.time_date);
txtTitle.setText(item.titleNews);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructNote item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_notes, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
كدها رو باید در متد fill بزارم لینكهای عكسها قبلا در كلاسی كه مربوط به گرفتن لینك خبر و لینك عكسها و نمایش لیست ویو است در یك ارایه زخیره شده ، چجوری بتونم در این كلاس در این متد بگم كه بره و از اون ارایه عكسها رو لود كنه ؟ ممنون
این تابع به کارت میاد
public void fill(final ArrayAdapter<StructTask> adapter,
final StructTask item, final int position) {
txtTitle.setText(item.task_title);
txtDescription.setText(item.task_desc);
if (item.task_done == 1) {
chkDone.setChecked(true);
} else {
chkDone.setChecked(false);
}
// create a buffered image
strBase64 = item.task_imageblob;
String filename = item.task_thumbnails.replace(G.URlServer, "");
filename = filename.replace("/thumbnails/", "");
filename = filename.replace("/images/", "");
Log.i(G.Tag, "Original filename: " + filename);
File imageFile = new File(G.DIR_APP + "/" + filename);
if (!imageFile.exists()) {
imgPic.setImageBitmap(null);
DownloadManager.addToDownloadList(item.task_thumbnails);
return;
}
if (item.task_imageurl_sdcard != null) {
imgPic.setImageBitmap(null);
Bitmap bmp = BitmapFactory
.decodeFile(item.task_imageurl_sdcard);
Log.i("task_imageurl_sdcard", item.task_imageurl_sdcard);
imgPic.setImageBitmap(bmp);
}
imgDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
adapter.remove(item);
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("task_id", ""
+ item.task_id));
Commands.Remove(params);
}
});
layoutRoot.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(G.currentActivity, ActivityEdit.class);
intent.putExtra("POSITION", position);
// G.currentActivity.startActivity(intent);
}
});
chkDone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkBox = (CheckBox) view;
if (checkBox.isChecked()) {
item.task_done = 1;
} else {
item.task_done = 0;
}
if (item.task_done == 1) {
txtTitle.setTextColor(Color.RED);
} else {
txtTitle.setTextColor(Color.WHITE);
}
}
});
if (item.task_done == 1) {
txtTitle.setTextColor(Color.RED);
} else {
txtTitle.setTextColor(Color.WHITE);
}
}
با این كارم درست نمیشه ، باید از كتابخانه لودكردن تصویر استفاده كنم ، با پیكاسو موفق شدم كارم رو راه بندازم ، ولی سرعت لود تصاویر كمی كنده
سوالم اینه ،،، بهترین كتابخانه برای لود كردن تصویر از وب ( اینترنت ) و نمایش در ImageView كدام كتابخانه است ؟؟؟
ممنون میشم دوستان كمك كنند
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .